Stream
2020-10-27 本文已影响0人
倚仗听江
假设此时要对以下的集合进行各种操作,Stream就可以极大的提高我们的效率。
public static final List<Integer> LIST = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- 获取指定数量的流
LIST.stream().limit(4).forEach(System.out::println);
- 通过设置的条件过滤出元素
LIST.stream().filter(x -> x > 1).forEach(System.out::println);
- 对流进行排序
new Random().ints().limit(10).sorted().forEach(System.out::println);
- 实现很多归约操作
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty() && !string.contains("a")).collect(Collectors.joining(" "));
System.out.println("合并字符串: " + mergedString);
- 映射每个元素到对应的结果
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数(distinct()可以去重)
numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList()).forEach(System.out::println);
- 统计
IntSummaryStatistics stats = LIST.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());
- 排序
LIST.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
- 接口终端操作
- count方法,跟List接口的size一样,返回的都是这个集合流的元素的长度
- anyMatch表示,判断的条件里,任意一个元素成功,返回true
- allMatch表示,判断条件里的元素,所有的都是,返回true
- noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
System.out.println(LIST.stream().anyMatch(x -> x == 1));