【Java Stream】基本用法学习
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)); // 按长度分组