1. Stream流

2. 获取Stream流(创建流)

能使用stream流的类型

  • 单例集合

    • 使用Collection接口中的 strema()方法

      1. ArrayList<Integer> list = new ArrayList<>(List.of(1, 2, 3, 65, 7));
      2. Stream<Integer> stream = list.stream();
      3. stream.forEach(s -> System.out.println(s));
      4. // 也可使用链式编程
      5. list.stream().forEach(s -> System.out.println(s));
  • 双列集合

    • 间接的生成流:先通过keySet或者entrySet获取一个Set集合,再获取Stream流

      1. Map<String, Integer> key1 = Map.of("key1", 123, "key2", 456);
      2. key1.entrySet().stream().forEach(s -> System.out.println(s));
  • 数组

    • Arrays中的静态方法stream生成流

      1. int[] arr ={1,4,6,7,5,8};
      2. Arrays.stream(arr).forEach(s -> System.out.println(s));
  • 同种数据类型的多个数据

    • 使用Stream的of方法 与不可变集合类似

      1. Stream.of(1,5,7,9,9).forEach(s -> System.out.println(s));

3. filter 过滤 (中间流)

filter方法会获取流中的 每一个数据

3.1. test方法

传递一个Stream流中的元素,返回一个布尔值,如是true则当前数据保留,如为false则数据不保留

  1. list.stream().filter(new Predicate<String>() {
  2. @Override
  3. public boolean test(String s) {
  4. boolean result = s.startsWith("张");
  5. return result;
  6. }
  7. }).forEach(s -> System.out.println(s));

4. limit 截取

截取steam流中前n个元素

  1. list.stream().limit(2).forEach(s -> System.out.println(s));

5. skip 跳过

跳过steam流中前n个元素

  1. list.stream().skip(3).forEach(s -> System.out.println(s));

6. concat 合并 两个stream流

  1. Stream<String> stream = list.stream();
  2. Stream<String> stream2 = list.stream();
  3. Stream.concat(stream,stream2).forEach(s -> System.out.println(s));

7. distinct 去除流中重复元素

依赖于hashcode和equals方法

  1. list.stream().distinct().forEach(s -> System.out.println(s));

8. forEach 对流中每个元素的操作(结束流)

forEach 对此流中每个元素执行指定操作, 只有一个抽象方法accept()

  1. list.stream().forEach(new Consumer<String>() {
  2. @Override
  3. public void accept(String s) {
  4. System.out.println(s);
  5. }
  6. });

9. count 流中元素的个数

返回一个long类型的数

  1. long count = list.stream().count();
  2. System.out.println(count);

10. Stream流 收集方法

在Stream流无法直接修改集合/数组等数据源中数据,创建Stream流不影响原先数据

10.1. collect()

10.1.1. toList

  1. List<String> collect = list.stream().skip(1).collect(Collectors.toList());

10.1.2. toSet

  1. Set<String> collect1 = list.stream().limit(2).collect(Collectors.toSet());

10.1.3. toMap

  1. Map<Character, Character> collect2 = list.stream().limit(2).collect(Collectors.toMap(
  2. s -> s.charAt(1) // key
  3. , s -> s.charAt(0) // value
  4. ));