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);