1. Stream流
2. 获取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));
双列集合
间接的生成流:先通过keySet或者entrySet获取一个Set集合,再获取Stream流
Map<String, Integer> key1 = Map.of("key1", 123, "key2", 456);
key1.entrySet().stream().forEach(s -> System.out.println(s));
数组
Arrays中的静态方法stream生成流
int[] arr ={1,4,6,7,5,8};
Arrays.stream(arr).forEach(s -> System.out.println(s));
同种数据类型的多个数据
使用Stream的of方法 与不可变集合类似
Stream.of(1,5,7,9,9).forEach(s -> System.out.println(s));
3. filter 过滤 (中间流)
filter方法会获取流中的 每一个数据
3.1. 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));
4. limit 截取
截取steam流中前n个元素
list.stream().limit(2).forEach(s -> System.out.println(s));
5. skip 跳过
跳过steam流中前n个元素
list.stream().skip(3).forEach(s -> System.out.println(s));
6. concat 合并 两个stream流
Stream<String> stream = list.stream();
Stream<String> stream2 = list.stream();
Stream.concat(stream,stream2).forEach(s -> System.out.println(s));
7. distinct 去除流中重复元素
依赖于hashcode和equals方法
list.stream().distinct().forEach(s -> System.out.println(s));
8. forEach 对流中每个元素的操作(结束流)
forEach 对此流中每个元素执行指定操作, 只有一个抽象方法accept()
list.stream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
9. count 流中元素的个数
返回一个long类型的数
long count = list.stream().count();
System.out.println(count);
10. Stream流 收集方法
在Stream流无法直接修改集合/数组等数据源中数据,创建Stream流不影响原先数据
10.1. collect()
10.1.1. toList
List<String> collect = list.stream().skip(1).collect(Collectors.toList());
10.1.2. toSet
Set<String> collect1 = list.stream().limit(2).collect(Collectors.toSet());
10.1.3. toMap
Map<Character, Character> collect2 = list.stream().limit(2).collect(Collectors.toMap(
s -> s.charAt(1) // key
, s -> s.charAt(0) // value
));