ArrayList<String> strings = new ArrayList<> ();
strings.add ("asd11");
strings.add ("vsda3");
strings.add ("bsdfa434");
//1.fitter过滤 foreach是一个最终操作后续是不能使用其他的stream的
strings.stream ().filter ((x)->x.startsWith ("a")).forEach (System.out::println);//asd11
//2.sort排序 需要注意的是,排序只创建了一个排列好后的Stream,而不会影响原有的数据源,排序之后原数据strings是不会被修改的
strings.stream ().sorted ().filter (x->x.equals ("asd11")).forEach (System.out::println);//asd11
//3.map提供了很多可以处理数据的方法
strings.stream ().map (String::toUpperCase).sorted ((a,b)->b.compareTo (a)).forEach (System.out::println);//VSDA3 BSDFA434 ASD11
strings.stream ().map (String::length).limit (5).forEach (System.out::println);//5 5 8
//4.match 提供了判断boolean类型的值
boolean test01 = strings.stream ().anyMatch (x->x.startsWith ("v"));
System.out.println (test01);//true
boolean b = strings.stream ().allMatch (x -> x.startsWith ("bsdfa434"));
System.out.println (b);//false
//5.count 计算 最终操作
long b1 = strings.stream ().filter (x -> x.startsWith ("b")).count ();
System.out.println (b1);
}
@Data
public class Person{
String name;
String age;
}
Lambda配合Optional<T>可以使Java对于null的处理变的异常优雅
这里假设我们有一个person object,以及一个person object的Optional wrapper:
Optional<T>如果不结合Lambda使用的话,并不能使原来繁琐的null check变的简单。
只有当Optional<T>结合Lambda一起使用的时候,才能发挥出其真正的威力!
我们现在就来对比一下下面四种常见的null处理中,Java 8的Lambda+Optional<T>和传统Java两者之间对于null的处理差异。
情况一 - 存在则开干
情况二 - 存在则返回,无则返回屁
情况三 - 存在则返回,无则由函数产生
情况四 - 夺命连环null检查