java8 特性之函数式接口

女生的网名这么多〃 提交于 2020-07-29 02:57:13
java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。注解都是@FunctionalInterface

Consumer 消费  [kənˈsjuːmə(r)] 

  List<Person> lisiList = new ArrayList<>();
        Consumer <Person> consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };
        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));

// 结果[{"age":22,"name":"lisi"},{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

 List<Person> lisiList = new ArrayList<>();
        Consumer <Person> consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };

        consumer = consumer.andThen(
           x -> lisiList.removeIf(y -> y.age < 23)
        );

        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));
// 结果 [{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

Supplier 供应  [səˈplaɪə(r)]

     public List<Integer> getNumList(int num, Supplier<Integer> sup){
      List<Integer> list = new ArrayList<>();
      for(int i=0;i<num;i++){
          Integer a = sup.get();
          list.add(a);
      }
      return list;
    }

    @Test
    public void test2(){
        List<Integer> list = getNumList(5,() -> (int)(Math.random()*100));
        for(Integer i:list){
            System.out.println(i);
        }
    }

Function 函数  [ˈfʌŋkʃn]

    public String strHander(String str, Function<String,String> fun){
        return fun.apply(str.toLowerCase());
    } 
    
    @Test
    public void test3(){
       String str = strHander("Hello world",(t) -> t.replace('o','a'));
        System.out.println(str);
    }

Predicate 断言  [ˈprɛdɪˌkeɪt] 

     public List<String> filterStr(List<String> strs, Predicate<String> pre){
        List<String> list = new ArrayList<>();
        for(String str:strs){
            if(pre.test(str)){
                list.add(str);
            }
        }
        return list;
    }

    @Test
    public void test4(){
        List<String> list = Arrays.asList("abc","dedff","dde","ccdee","fde");

        list = filterStr(list,(x)->x.length()==3);
        for(String str:list){
            System.out.println(str);
        }
    }

参考  java8新特性

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!