Java8内置四大核心函数式接口

先来看几个例子,主要练习策略模式:

Java8内置四大核心函数式接口_第1张图片Java8内置四大核心函数式接口_第2张图片

用策略模式的做法

定义个接口

Java8内置四大核心函数式接口_第3张图片Java8内置四大核心函数式接口_第4张图片

其实像这样的接口并不需要我们自己创建

java8推出的Lambda表达式主要就是为了简化开发,而Lambda表达式

的应用主要是针对与函数式接口,自然也推出了对应的一些接口

/**
 * Java8 内置的四大核心函数式接口
 *
 * Consumer :消费型接口
 *      void accept(T t);
 *
 * Supplier :供给型接口
 *      T get();
 *
 * Function :函数型接口
 *      R apply(T t)
 *
 * Predicate :断言型接口
 *      boolean test(T t)
 */
/**
 * Java8 内置的四大核心函数式接口
 *
 * Consumer :消费型接口
 *      void accept(T t);
 *
 * Supplier :供给型接口
 *      T get();
 *
 * Function :函数型接口
 *      R apply(T t)
 *
 * Predicate :断言型接口
 *      boolean test(T t)
 */
public class TestLambda2 {

    //Consumer 消费型接口
    @Test
    public void test01(){
//        Consumer con=new Consumer() {
//            @Override
//            public void accept(Double aDouble) {
//                System.out.println(aDouble);
//            }
//        };
        happy(1000, x-> System.out.println("消费了"+x+"元"));
    }
    //出去玩
    public void happy(double money, Consumer con){
        con.accept(money);
    }

    //Supplier 供给型接口:
    @Test
    public void test02(){
        List numList = getNumList(10, () ->
                //new Random().nextInt()//产生随机数  这里可以决定你要产生的是什么数
                (int)(Math.random()*100)
        );
        System.out.println(numList);
    }

    //产生指定个数的整数,并放入集合中
    public List getNumList(int num, Supplier sup){
        List list=new ArrayList<>();
        for(int i=0;i 函数型接口   对传入的参数T进行某种处理  返回需要的R
    @Test
    public void test03(){
        int hello_function = handlerStr("Hello Function", x -> x.length());
        System.out.println(hello_function);
    }
    //例如 希望传入一个字符串  返回一个字符串长度
    public int handlerStr(String str, Function func){
        return func.apply(str);
    }

    private List list= Arrays.asList(
            new User("张三",18,3000.0),
            new User("李四",28,9000.0),
            new User("王五",48,8000.0),
            new User("赵六",13,5000.0),
            new User("田七",25,13000.0)
    );

    //Predicate :断言型接口
    @Test
    public void test04(){
        List filter = filter(list, x -> x.getAge() > 28);
        System.out.println(filter);
    }
    //比如说将满足条件的放到集合中
    public List filter(List list, Predicate pre){
        List userList=new ArrayList<>();
        for(User user:list){
            if(pre.test(user)){
                userList.add(user);
            }
        }
        return userList;
    }
}

你可能感兴趣的:(windows)