lambda和函数式接口总结

Random

 

Random位于java.util包下,可以产生随机数。

import java.util.Random;

public class RandomText {
    public static void main(String[] args) {
        //创建随机数对象
        Random random = new Random();

        //随机产生一个int类型取值范围内的数字。
        int num = random.nextInt();
        System.out.println(num);

        //产生[0~100]之间的随机数。不能产生101
        //nextInt翻译为:下一个int类型的数据是101,表明只能取到100
        int num2 = random.nextInt(101);
        System.out.println(num2);

    }
}
//结果-1400250908
//25

生成5个不重复的随机数

编写程序,生成5个不同的随机数。重复的话重新生成
最终生成的五个随机数放到数组当中,要求数组中这5个随机数不重复

import java.util.Arrays;
import java.util.Random;

public class RandomText {
    public static void main(String[] args) {

        //创建一个Random对象
        Random random = new Random();

        //准备一个长度为5的一维数组
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = -1;
        }

        int index = 0;
        //while循环,生成随机数
        while (index < arr.length) {
            //生成随机数
            int num = random.nextInt(101);
            //判断arr数组中有没有num
            //如果没有这个num,就放进去
            if (!contains(arr, num)) {
                arr[index++] = num;
            }

        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }


    }

    /**
     * 单独编写一个方法,这个方法可以判断数组中是否包含某个元素
     *
     * @param arr 数组
     * @param key 元素
     * @return true表示包含,false表示不包含
     */
    public static boolean contains(int[] arr, int key) {
        for (int i = 0; i < arr.length; i++) {
            if (key == arr[i]) {
                return true;
            }
        }
        return false;
    }

}

 结果如下:

 å¨è¿éæå¥å¾çæè¿°

 函数式接口

什么是函数式接口

函数式接口就是只定义一个抽象方法的接口,如下

 å¨è¿éæå¥å¾çæè¿°

 Runnable接口类:源代码如下

 å¨è¿éæå¥å¾çæè¿°

Callable接口类: 

 å¨è¿éæå¥å¾çæè¿°

 同时只要接口只定义了一个抽象方法,那它就还是一个函数式接口,哪怕这个接口有好多默认的方法实现,如Comparator接口类:

 å¨è¿éæå¥å¾çæè¿°

 总结:只要接口只定义了一个抽象方法,那它就是一个函数式接口,还有在上述Java Api中都有个@FunctionalInterface注解,这表示着该接口会设计成一个函数式接口,不符合规范的话,就会编译报错。

 java中内置核心函数式接口

å¨è¿éæå¥å¾çæè¿°

 其他接口

 å¨è¿éæå¥å¾çæè¿°

package com.atguigu.java1;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * java内置的4大核心函数式接口
 *
 * 消费型接口 Consumer<T>     void accept(T t)
 * 供给型接口 Supplier<T>     T get()
 * 函数型接口 Function<T,R>   R apply(T t)
 * 断定型接口 Predicate<T>    boolean test(T t)
 *
 *
 * @author shkstart
 * @create 2019 下午 2:29
 */
public class LambdaTest2 {

    @Test
    public void test1(){

        happyTime(500, new Consumer<Double>() {
            @Override
            public void accept(Double aDouble) {
                System.out.println("学习太累了,去天上人间买了瓶矿泉水,价格为:" + aDouble);
            }
        });

        System.out.println("********************");

        happyTime(400,money -> System.out.println("学习太累了,去天上人间喝了口水,价格为:" + money));
    }

    public void happyTime(double money, Consumer<Double> con){
        con.accept(money);
    }


    @Test
    public void test2(){
        List<String> list = Arrays.asList("北京","南京","天津","东京","西京","普京");

        List<String> filterStrs = filterString(list, new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("京");
            }
        });

        System.out.println(filterStrs);


        List<String> filterStrs1 = filterString(list,s -> s.contains("京"));
        System.out.println(filterStrs1);
    }

    //根据给定的规则,过滤集合中的字符串。此规则由Predicate的方法决定
    public List<String> filterString(List<String> list, Predicate<String> pre){

        ArrayList<String> filterList = new ArrayList<>();

        for(String s : list){
            if(pre.test(s)){
                filterList.add(s);
            }
        }

        return filterList;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让火车在天上飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值