Stream API
作者:互联网
Stream API
一.创建Stream
//1.Colleaction系列集合提供
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//2.Arrays的静态方法stream();
Employee[] emps = new Employee[10];
Stream<String> stream = Arrays.stream(array);
//3.通过Stream.of
Stream<String> stream = Stream.of("aaa","bbb","ccc");
//4.创建无线流
Stream<Integer> stream = Stream.iterate(0,(x) -> x+2);
二.中间操作
中间操作不会执行任何操作,只有出现终止操作才会一次性执行全部内容,即:“惰性求值”
1.filter()过滤
过滤条件
2.limit(Long maxnum)
限制个数
出现短路,限制出现俩条之间进行短路不进行迭代操作,提高了效率
3.skip()和limit互补跳过
4.去重distinct,通过hashcode和equals方法
5.映射
map接收一个Lambda,将元素转换为其他形式,或提取信息。
接收一个函数作为参数,该函数还会应用到每个元素上,并将其映成一个新的元素。
flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连成一个流
类比add(),addAll()两个方法
list.stream()
.map((str) -> str.toUpperCase())
.forEach(System.out::println);
employeeList.stream
.map(Employee::getName)
.forEach(System.out::println);
6.排序
sorted(Comparable自然排序)
sorted(Comparator com)(Comparator 定制排序)
//先按年龄排,年龄相同按姓名排
employees.stream()
.sorted((e1,e2) -> {
if(e1.getAge().equals(e2.getAge())){
return e1.getName().comparaTo(e2.getName());
}else{
return e1.getAge().comparaTo(e2.getAge());
}
}).forEach(System.out::println);
三.终止操作
查找与匹配
1.allMatch();检查是否匹配所有元素
2.anyMatch();检查是否至少匹配一个元素
3.noneMatch();检查没有匹配所有元素
4.findFrist()返回第一个,返回Optional
5.findany返回任意一个,返回Optional
6.count返回总个数
7.max(comparator)返回最大值
8.min(comparator)返回最小值
Optional是有可能为空的一个封装容器类,解决空指针问题,有一个op.orElse()如果为空就应用这个orelse()进行替代,避免空指针
归约
将流中元素反复结合起来得到一个值
identity起始值
binaryOperator
1.reduce()
map-reduce
收集
Collector
Collectors工具类
List<String> list = employees.stream()
.map(employee::getName)
.collect(Collectors.toList());
标签:map,Stream,stream,getName,元素,list,API 来源: https://www.cnblogs.com/Arborblog/p/16409881.html