本文共 1915 字,大约阅读时间需要 6 分钟。
Stream流主要用于对集合的数据进行加工处理,可以将需要处理的元素集合看作一种流,流在管道中传输,并且在管道的节点进行处理,比如 筛选,排序,聚合
对于流的操作,主要为三个步骤,流的创建 中间操作 最终操作流的创建
Listnames = Arrays.asList("c","e","d","b","e");//通过集合创建流Stream stream = names.stream();//通过Stream创建流 Stream stream = Stream.of("c","e","d","b","e");
中间操作
多个中间操作可以结合使用names.stream().filter(f ->!"e".equals(f)).forEach(System.out::print);//cdb
names.stream().map(f -> f + "1").forEach(System.out::print);//c1e1d1b1e1
names.stream().distinct().forEach(System.out::print);//cedb
names.stream().sorted().forEach(System.out::print);//bcdeenames.stream().sorted(Comparator.reverseOrder()).forEach(System.out::print);//eedcb
names.stream().limit(2).forEach(System.out::print);//ce
names.stream().skip(2).forEach(System.out::print);//dbe
最终操作
操作流来产生一个最终结果 forEach 迭代流中的每个元素names.stream().skip(2).forEach(System.out::print);//dbe
count 统计流中元素的个数
long l = names.stream().skip(2).count(); System.out.println(l);//3
collect 将流重新装为一个集合
Listlist = names.stream().skip(2).collect(Collectors.toList()); System.out.println(list);//[d, b, e]
统计
一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。Listnumbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());
两个集合的数据处理
allMatch 会一直迭代所有的元素 anyMatch 只要有一个满足条件的元素就结束Listnames = Arrays.asList("a","e","d","b","t");List tags = Arrays.asList("r","t","q","v","c");//判断tags中是否包含与names中相同的元素boolean isFlag = names.stream().allMatch(v -> tags.stream().anyMatch(s -> s.equals(v)));
转载地址:http://iviti.baihongyu.com/