一 Stream 的三个操作步骤
1.创建Stream
2.中间操作
3.终止操作(终端操作)
创建 Stream
1.通过Collection 系列集合提供的Stream() 或者 parallelStream()
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
2.通过Arrays 中的静态方法stream()获取数组流
Employee[] emps = new Employee[10];
Stream<Employee> stream1 = Arrays.stream(emps);
3.通过Stream类中的静态方法of()
Stream<String> stream3 = Stream.of("aa", "bb", "cc");
4.创建无限流
Stream<Integer> iterate4 = Stream.iterate(0, (x) -> x + 2);
iterate4.limit(10)
.forEach(System.out::println);
5.生成
Stream.generate(()->Math.random())
.limit(5)
.forEach(System.out::println);
中间操作
筛选与切片
filter-接收 Lambda,从流中排除某些元素。
limit 截断流
skip(n) 跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流,与limit(n)互补
distinct 筛选,通过流所生成元素的hashCode() 和 equals() 去除重复元素
UserModel userModel=new UserModel();
List<UserModel> use=new ArrayList<>();
Stream<UserModel> stream2 = use.stream()
.filter((e) -> {
System.out.println("中间操作");
return e.getId() > 10;
}).limit(2)
.distinct();
//终止操作:一次性执行全部内容,即“惰性求值”
stream2.forEach(System.out::println);
多个中间操作可以连接起来形成一个流水线,除非流水线上出发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性保存处理,称为“惰性求值”。
映射
map 接收lambada ,将元素转换成其他形式或提取信息,接收一个函数座位参数,该函数会被用到每个元素上,并将其映射成一个新的元素。
List<String> list1=Arrays.asList("aaa","bbb","ccc","ddd","eee");
list1.stream()
.map((str)->str.toUpperCase())
.forEach(System.out::println);
flatmap 接收一个函数座位参数,将流中的每个值转换成另外一个流,然后把所有流连成一个流
排序
sorted()–自然排序
List<String> list2 =Arrays.asList("ccc","aaa","bbb","ddd","eee");
list2.stream()
.sorted().forEach(System.out::println);
sorted(Comparator com) 定制排序
List<UserModel> use=new ArrayList<>();
use.stream()
.sorted((e1,e2)->{
if(e1.getId().equals(e2.getId())){
return e1.getName().compareTo(e2.getName());
}else{
return e1.getTime().compareTo(e2.getTime());
}
}).forEach(System.out::println);
终止操作
查找与匹配
allmatch–检查是否匹配所有元素
anyMatch 检查是否至少匹配一个元素
noneMatCh 检查是否没有匹配所有元素
findFirst 返回第一个元素
findAny 返回当前流中的任意元素
count 返回流中元素的总个数
max 返回流中最大值
mix返回流中的最小值
收集
collect --将流转换成其他形式,接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
List<UserModel> use=new ArrayList<>();
...list自行添加填充
List<Integer> collect = use.stream()
.map(UserModel::getId)
.collect(Collectors.toList());
大家有任何疑问可留言
转载记得贴上来源