stream

一、创建Stream流

  1. 从集合创建流

单列集合————Collection中的默认方法

List list = Arrays.asList("a", "b", "c");
Stream stream = list.stream();

双列集合————无法直接使用stream流

Map map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 28);

// 获取键的流
Stream keyStream = map.keySet().stream();
Stream> entryStream = map.entrySet().stream();

// 获取键值对的流
Stream> entryStream = map.entrySet().stream();
  1. 从数组创建流————Arrays工具类的静态方法
String[] array = {"a", "b", "c"};
Stream stream = Arrays.stream(array);
  1. 零散数据————Stream接口中的静态方法
Stream stream = Stream.of("a", "b", "c");
Stream integerStream = Stream.of(1, 2, 3);

二、Stream流的中间方法

  1. 过滤————filter
    作用:过滤符合条件的元素。
List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
       .filter(n -> n % 2 == 0)  // 只保留偶数
       .forEach(System.out::println);  // 输出:2, 4
  1. 截取(Limiting & Skipping)
    limit(n)
    作用:只取前n个元素。
List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
       .limit(3)  // 只取前3个
       .forEach(System.out::println);  // 输出:1, 2, 3

skip(n)
作用:跳过前 n 个元素。

List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
       .skip(2)  // 跳过前2个
       .forEach(System.out::println);  // 输出:3, 4, 5
  1. 去重————distinct()
    作用:去除重复元素(基于 equals() 和 hashCode())。
List numbers = Arrays.asList(1, 2, 2, 3, 3, 3);
numbers.stream()
       .distinct()  // 去重
       .forEach(System.out::println);  // 输出:1, 2, 3
  1. 转换流中的数据类型————map()
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
     .map(name -> name.toUpperCase())
     .forEach(s -> System.out.println(s));

三、Stream流的终结方法

  1. 遍历————forEach
List.of("A", "B", "C").stream()
   .forEach(System.out::println);
  1. 统计————count
    作用:返回流中元素数量。
long count = List.of("A", "B", "C").stream()
   .count();
  1. 收集结果————collect
    作用:将流元素收集到容器(如 List、Set、Map)。
List peopleWithDuplicates = Arrays.asList(
    new Person(1, "Alice"),
    new Person(1, "Bob")  // 重复的 id=1
);

// 因为map的key不能重复,所以有合并策略:保留旧值
Map mergedMap = peopleWithDuplicates.stream()
    .collect(Collectors.toMap(
        Person::getId,
        Person::getName,
        (oldValue, newValue) -> oldValue  // 冲突时保留旧值
    ));

// 结果:{1=Alice}

你可能感兴趣的:(java)