例一
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("no use lambda");
}
});
Thread t2 = new Thread(() -> System.out.println("use lambda"));//只需要一行
例二
List<Integer> integers = Arrays.asList(4, 5, 6,1, 2, 3,7, 8,8,9,10);
List<Integer> evens = integers.stream().filter(i -> i % 2 == 0)
.collect(Collectors.toList()); //过滤出偶数列表 [4,6,8,8,10]<br>
List<Integer> sortIntegers = integers.stream().sorted()
.limit(5).collect(Collectors.toList());//排序并且提取出前5个元素 [1,2,3,4,5]
List<Integer> squareList = integers.stream().map(i -> i * i).collect(Collectors.toList());//转成平方列表
int sum = integers.stream().mapToInt(Integer::intValue).sum();//求和
Set<Integer> integersSet = integers.stream().collect(Collectors.toSet());//转成其它数据结构比如set
Map<Boolean, List<Integer>> listMap = integers.stream().collect(Collectors.groupingBy(i -> i % 2 == 0)); //根据奇偶性分组
List<Integer> list = integers.stream().filter(i -> i % 2 == 0).map(i -> i * i).distinct().collect(Collectors.toList());//复合操作
//转成平方列表 数据并行处理,只需要在原来的基础上加一个parallel()就可以开启~。顺便提一下这里parallel()开启的底层并行框架是fork/join,默认的并行数是Ncpu个。
List<Integer> squareList = integers.stream().parallel().map(i -> i * i).collect(Collectors.toList());
例三、for循环最好不要嵌套两层
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
for (String feature : features) {
System.out.println(feature); //外部迭代
}
features.stream.forEach(n -> System.out.println(n)); //内部迭代
例四
尽量避免在Lambda的方法体中使用{}代码块
优先使用
Foo foo = parameter -> buildString(parameter);
private String buildString(String parameter) {
String result = "Something " + parameter;
//many lines of code
return result;
}
而不是
Foo foo = parameter -> { String result = "Something " + parameter;
//many lines of code
return result;
};