【Java8新特性】Java8 内置的四大核心函数式接口

函数式接口是指只有一个抽象函数的接口
使用lambda必须要用函数式接口,java8中提供了四大核心函数式接口,我们可以直接使用,就免去了自己写的麻烦

1.Predicate:断言型接口

@Test
    public void test4() {
        List<String> list = Arrays.asList("Hello","shang","lambda","sss","eatsdgd");

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

    }


    //需求:将满足条件的字符串,放入集合中
    public List<String> FilterStr(List<String> list,Predicate<String> pre){
        List<String> strlist = new ArrayList<>();

        for(String str: list) {
            if (pre.test(str)) {
                strlist.add(str);
            }
        }
        return strlist;

}

2.Function:函数式接口

        @Test
        public void test3() {
           String newStr= StrHandler("\t\t\t 方梦初醒", (str) -> str.trim());
           System.out.println(newStr);

           String subStr = StrHandler("天阶夜色凉如水", (str) -> str.substring(2, 5));
           System.out.println(subStr);
        }


        //用于处理字符串
        public String StrHandler(String str, Function<String, String> fun) {
            return fun.apply(str);

}

3.Supplier:供给型接口

        @Test
        public void test2() {
             List<Integer> numList = getNumList(10, ()->(int)Math.random() * 10 );

             for(Integer num : numList) {
                 System.out.println(num);
             }

        }
        //需求,产生指定个数的整数,并放入集合中
        public List<Integer> getNumList(int num, Supplier<Integer> sup){
            List<Integer> list = new ArrayList<>();

            for (int i = 0; i < num; i++) {
                Integer n = sup.get();
                list.add(n);
            }
            return list;

}

4.Consumer:消费型接口

        @Test
        public void test1() {
            happy(10000, (m) -> System.out.println("买买买"+m));
        }

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

猜你喜欢

转载自blog.csdn.net/zjy15203167987/article/details/80209077