【Java Stream】基本用法学习

发布于:2025-07-14 ⋅ 阅读:(11) ⋅ 点赞:(0)

Java Stream

由于在公司写代码时,发现有大量地方可以优化为使用stream流的方式写,且更加简洁,因此学习了一下stream的基础语法。

Java Stream 是 Java 8 引入的用于处理集合数据的函数式 API,提供了一种高效、声明式的数据处理方式。

1、创建流

// 从集合创建
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream1 = list.stream(); 

// 从数组创建
String[] array = {"a", "b", "c"};
Stream<String> stream2 = Arrays.stream(array);

// 直接创建
Stream<String> stream3 = Stream.of("a", "b", "c");
Stream<Integer> stream4 = Stream.iterate(0, n -> n + 1); // 无限流
Stream<Double> stream5 = Stream.generate(Math::random);   // 随机数流

// 并行流(Parallel Streams)
list.parallelStream()

2、操作

  • 过滤:filter()
List<String> list = Arrays.asList("a", "b", "c");

List<String> filtered = list.stream()
    .filter(s -> s.startsWith("a")) // 过滤以"a"开头的元素
    .collect(Collectors.toList());  // 结果: ["a"]
  • 映射:map()
List<String> list = Arrays.asList("a", "b", "c");

List<Integer> lengths = list.stream()
    .map(String::length) // 将字符串映射为其长度
    .collect(Collectors.toList()); // 结果: [1, 1, 1]
  • 去重 & 排序:distinct()、sorted()
List<String> result = Stream.of("a", "c", "b", "a")
    .distinct()          // 去重 → ["a", "c", "b"]
    .sorted()            // 排序 → ["a", "b", "c"]
    .collect(Collectors.toList());
  • 截取 & 跳过:skip()、limit()
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = nums.stream()
    .skip(2)   // 跳过前2个 → [3,4,5]
    .limit(2)  // 取前2个   → [3,4]
    .collect(Collectors.toList());
  • 遍历:forEach()
list.stream().forEach(System.out::println); // 输出每个元素
  • 聚合计算:count()、max()
long count = list.stream().count();          // 元素总数
Optional<String> max = list.stream().max(String::compareTo); // 最大值
  • 收集结果
    • 转List/Set:Collectors.toList()、Collectors.toSet()
    • 转Map:Collectors.toMap()
    • 分组:Collectors.groupingBy()
// 转List/Set
List<String> listResult = stream.collect(Collectors.toList());
Set<String> setResult = stream.collect(Collectors.toSet());

// 转Map
Map<String, Integer> map = list.stream()
    .collect(Collectors.toMap(s -> s, String::length)); // {a=1, b=1, c=1}

// 分组
Map<Integer, List<String>> groupByLength = list.stream()
    .collect(Collectors.groupingBy(String::length)); // 按长度分组

网站公告

今日签到

点亮在社区的每一天
去签到