Java8新特性lambda stream 函数接口学习

Lambda表达式:

格式为:expression = (variable) -> action

含义就是将几个变量通过action代码中的逻辑,计算出结果返回给expression表达式。

变量为一个时,可以不加括号。

        List<Integer> list = Arrays.asList(1,2,5,8,7,4);
        Collections.sort(list,(a,b) -> a.compareTo(b));
        list.forEach(System.out::print);
        new Thread(() -> System.out.println("执行!")).start();

函数接口:

function:传入一段代码组成的函数,返回一个值。和数学的函数作用相似。

consumer:消费者,消费参数。传入参数,没有返回值,但发挥作用,例如forEach,输出了语句。

supplier:提供者,提供参数。不需要传入参数,会返回一个值。例如get()。

predicate:断言。传入参数,通过函数中定义的代码判断,返回boolen类型。

stream:

对集合的增强,类似高级版的iterate。可以与lambda表达式配合使用。格式:

stream:创建集合或对象的流。

filer为过滤器,根据条件,筛选元素。

count:统计符合条件的元素数量。

reduce:归约,将流通过运算转化为值。

map:对元素进行运算。

mapToInt,mapToDouble,mapToLong:将元素转换为int,double,long。

        List<Integer> list = Arrays.asList(1,2,5,null,3,null,8,4);
        //统计非空数量
        System.out.println(list.stream().filter(num -> num != null).count());
        //筛选出非空元素
        List<Integer> list2 = list.stream().filter(num -> num != null).collect(Collectors.toList());
        System.out.println(Arrays.toString(list2.toArray()));
        //将非空元素的最大值
        int max = list2.stream().max((a,b) -> a.compareTo(b)).get();
        System.out.println(max);
        //获取最小值
        int min = list2.stream().reduce(0,Integer::min);
        //求和
        int sum = list2.stream().reduce(0,(a,b) -> a + b);
        System.out.println("sum:"+sum);
        //获取非空元素的前3大的数字
        List<Integer> list3 = list2.stream().sorted((a,b) -> b.compareTo(a)).limit(3).collect(Collectors.toList());
        System.out.println(Arrays.toString(list3.toArray()));
        //将list转换为map
        Map<Integer,Integer> map = list2.stream().collect(Collectors.toMap(a -> a.intValue(),b -> b.intValue()));
        map.forEach((k,v)-> System.out.print("key:"+k+" value:"+v));
        System.out.println();
        //将list中的元素进行平方运算
        List<Integer> list4 = list.stream().filter(num -> num != null).map(num -> num * num).collect(Collectors.toList());
        list4.forEach(System.out::print);
        System.out.println();
        //将全部元素转换为double,节省拆箱装箱成本
        list2.stream().mapToDouble(a -> a.intValue()).forEach(System.out::print);

猜你喜欢

转载自blog.csdn.net/wanderlustLee/article/details/81565126