java8 常见的函数式接口对比

java8 引入了函数式接口,其中用最多的当属Consumer、Predicate、Function这三类,这里写个例子展示没有缩写时和缩写时的差异。

废话不多说,直接上代码:


public class FunctionExpress {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        Collections.addAll(strings,"Java","Python","C++","JavaScript","C#");

        /**
         * java.util.function.Consumer<T> 接口定义了一个test抽象方法,接受泛型T,返回一个boolean
         * 函数式接口 Predicate =====================start===================================
         */
        Stream<String> str01 = strings.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("C");
            }
        });
        str01.forEach(System.out::print);

        //上面代码等价于下面的代码
        Stream<String> str02 = strings.stream().filter(s ->s.startsWith("C"));
        str02.forEach(System.out::print);
        //函数式接口 Predicate ======================end====================================


        /**
         * java.util.function.Consumer<T> 接口定义一个accept的抽象方法,接受泛型T的对象,没有返回值void
         * 函数式接口 Comsumer ======================start==================================
         */
         strings.stream().forEach(new Consumer<String>() {
             @Override
             public void accept(String s) {
                 System.out.print(s+"、");
             }
         });
        System.out.println();//此行没有意义,仅仅用于输出控制换行
        //上面代码等价于下面的代码
        strings.stream().forEach(s -> System.out.print(s+","));
        //函数式接口 Comsumer ======================end==================================


        /**
         * java.util.function.Function<T,R> 接口定义一个apply的抽象方法,接受泛型T的对象,返回一个泛型R的对象
         *函数式接口 Function ======================start==================================
         */
        Stream<Integer> str03 = strings.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return s.length();
            }
        });
        str03.forEach(a-> System.out.println(a));
        //函数式接口 Function ======================end==================================
    }


    /**
     *  补充下:流是java API java8中的新成员,允许你以声明的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)
     *  集合讲的数元素,流讲的是计算
     */

}

猜你喜欢

转载自blog.csdn.net/LB_Captain/article/details/121760585