stream常见方法
Stream 流提供了丰富的操作方法,可以对集合中的元素进行聚合、筛选、变换等操作,常见的方法包括以下几种:
1.filter(Predicate predicate):过滤流中的元素,保留符合条件的元素。
2.map(Function<T, R> mapper):对流中的每个元素进行操作,生成新的元素流。
3.reduce(T identity, BinaryOperator accumulator):将流中的所有元素按照某种规则进行聚合。
4.collect(Collector<T, A, R> collector):将流中的元素收集到一个容器中,生成新的集合。
5.sorted(Comparator comparator):对流中的元素进行排序。
6.distinct():去除流中的重复元素。
7.limit(long maxSize):限制流的大小,只取前 maxSize 个元素。
8.skip(long n):跳过流中的前 n 个元素,返回剩余的元素流。
9.forEach(Consumer action):对流中的每个元素执行指定的操作。
案例
1.过滤列表 strings 中为空的字符串,将非空字符串收集到一个新的列表 filtered 中
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);
输出:[abc, bc, efg, abcd, jkl]
2.将列表 numbers 中的每个整数取平方,并去除重复的平方数
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
System.out.println(squaresList);
输出:[9, 4, 49, 25]
3.sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);
输出:-1980825003
-1559049498
-1286530264
-1274252397
-1031281323
729106121
1124506809
1632649059
1923772168
1997033048
4.将 strList 列表转换为一个 strMap 字典,字典中的键是元素在列表中的索引,值是元素本身
List<String> list = Arrays.asList("abc", "gg", "bc", "efg", "abcd","1", "jkl");
Map<Integer, String> collect = list.stream().collect(Collectors.toMap(s -> list.indexOf(s), s -> s));
System.out.println(collect);
输出:{0=abc, 1=gg, 2=bc, 3=efg, 4=abcd, 5=1, 6=jkl}
5.将流中的所有元素按照某种规则进行聚合
0是我们的初始值,(a,b)->ab就是我们的累加器,其中a就是上一次的计算结果,b就是Stream流中当前元素,而后面的ab则是计算规则
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a * b);
System.out.println(sum);
输出:0
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(1, (a, b) -> a * b);
System.out.println(sum);
输出:120
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum);
输出:15