Stream流
# Stream 流
# 获取 Stream 流 (创建流)
能使用 stream 流的类型
单例集合
使用 Collection 接口中的 strema () 方法
ArrayList<Integer> list = new ArrayList<>(List.of(1, 2, 3, 65, 7)); Stream<Integer> stream = list.stream(); stream.forEach(s -> System.out.println(s)); // 也可使用链式编程 list.stream().forEach(s -> System.out.println(s));1
2
3
4
5
双列集合
间接的生成流:先通过 keySet 或者 entrySet 获取一个 Set 集合,再获取 Stream 流
Map<String, Integer> key1 = Map.of("key1", 123, "key2", 456); key1.entrySet().stream().forEach(s -> System.out.println(s));1
2
数组
Arrays 中的静态方法 stream 生成流
int[] arr ={1,4,6,7,5,8}; Arrays.stream(arr).forEach(s -> System.out.println(s));1
2
同种数据类型的多个数据
使用 Stream 的 of 方法 与不可变集合类似
Stream.of(1,5,7,9,9).forEach(s -> System.out.println(s));1
# filter 过滤 (中间流)
filter 方法会获取流中的 每一个数据
# test 方法
传递一个 Stream 流中的元素,返回一个布尔值,如是 true 则当前数据保留,如为 false 则数据不保留
list.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
boolean result = s.startsWith("张");
return result;
}
}).forEach(s -> System.out.println(s));
1
2
3
4
5
6
7
2
3
4
5
6
7
# limit 截取
截取 steam 流中前 n 个元素
list.stream().limit(2).forEach(s -> System.out.println(s));
1
# skip 跳过
跳过 steam 流中前 n 个元素
list.stream().skip(3).forEach(s -> System.out.println(s));
1
# concat 合并 两个 stream 流
Stream<String> stream = list.stream();
Stream<String> stream2 = list.stream();
Stream.concat(stream,stream2).forEach(s -> System.out.println(s));
1
2
3
2
3
# distinct 去除流中重复元素
依赖于 hashcode 和 equals 方法
list.stream().distinct().forEach(s -> System.out.println(s));
1
# forEach 对流中每个元素的操作 (结束流)
forEach 对此流中每个元素执行指定操作,只有一个抽象方法 accept ()
list.stream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
1
2
3
4
5
6
2
3
4
5
6
# count 流中元素的个数
返回一个 long 类型的数
long count = list.stream().count();
System.out.println(count);
1
2
2
# Stream 流 收集方法
在 Stream 流无法直接修改集合 / 数组等数据源中数据,创建 Stream 流不影响原先数据
# collect()
# toList
List<String> collect = list.stream().skip(1).collect(Collectors.toList());
1
2
2
# toSet
Set<String> collect1 = list.stream().limit(2).collect(Collectors.toSet());
1
2
2
# toMap
Map<Character, Character> collect2 = list.stream().limit(2).collect(Collectors.toMap(
s -> s.charAt(1) // key
, s -> s.charAt(0) // value
));
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48