关于lambda,可以看这篇文章,作者说的很详细:
https://www.cnblogs.com/linlinismine/p/9283532.html
下面是自己测试的代码:
//lambda的使用
public static void main(String[] args) {
//(s) -> System.out.println(s); lambda表达式方法的执行逻辑
//Consumer函数式接口只有一个accept方法
//将lambda表示的执行过程赋值给consumer,相当于重写了accept方法. lambda相当于一个实现类了
Consumer consumer= (s) -> System.out.println(s);
consumer.accept("ssss");
//lambda的应用场景
//1.代替匿名内部类
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("no use lambda");
}
});
t1.run();
Thread t2=new Thread(()-> System.out.println("use lambda"));
t2.run();
//2.以流水线的方式处理数据
//Collectors-实现了很多归约操作,例如将流转换成集合和聚合元素,Collectors可用于返回列表和字符串
//filter-按条件过滤
List<Integer> integers= Arrays.asList(4,3,6,1,2,5);
List<Integer> evens = integers.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
//forEach-输出
evens.forEach(System.out::println);
//sorted-按照从小到大排列
evens.stream().sorted().forEach(System.out::println);
//从大到小排列
evens.stream().sorted((x,y)->{return y.compareTo(x);}).forEach(System.out::println);
//map-映射出每个元素的结果
evens.stream().map(i->i*i).collect(Collectors.toList()).forEach(System.out::println);
//limit-获取指定数量
evens.stream().limit(1).collect(Collectors.toList());
//count-统计数量
long count = evens.stream().count();
//parallelStream-并行流
long count1 = evens.parallelStream().count();
//双冒号的用法
List<String> lists=new ArrayList<>();
lists.add("abC");
lists.add("aBc");
//将所有的字符变为大写
lists.stream().map(String->String.toUpperCase()).collect(Collectors.toList()).forEach(System.out::println);
//类名::方法名 构造- 类名::new
lists.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new)).forEach(System.out::println);
//3.更简单的数据并行处理
//所谓数据并行是指把数据划分成若干块分别映像到不同的处理机上,每一台处理机运行同样的处理程序对所分派的数据进行处理。
//计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。
// 数据并行处理,只需要在原来的基础上加一个parallel()就可以开启~。顺便提一下这里parallel()开启的底层并行框架是fork/join,默认的并行数是Ncpu个。
List<Integer> collect = evens.stream().parallel().map(i -> i * i).collect(Collectors.toList());
//4.内部迭代取代外部迭代
//描述要干什么,而不是怎么干;不一定需要顺序list中的元素
collect.stream().forEach(n-> System.out.println(n));
}