您好,登录后才能下订单哦!
Java 8 引入了函数式编程的特性,其中 Stream
API 是一个非常重要的部分。Stream
提供了丰富的操作来处理集合数据,而 Collectors
则是 Stream
中用于将流中的元素收集到集合或其他数据结构中的工具。本文将详细介绍 Java 8 中 Collectors
的应用。
Collectors
是 java.util.stream.Collectors
类中提供的一组静态工厂方法,用于将 Stream
中的元素收集到不同的数据结构中,如 List
、Set
、Map
等。Collectors
提供了丰富的收集操作,可以满足大多数常见的收集需求。
Collectors.toList()
方法可以将流中的元素收集到一个 List
中。
List<String> list = Stream.of("apple", "banana", "orange")
.collect(Collectors.toList());
Collectors.toSet()
方法可以将流中的元素收集到一个 Set
中。
Set<String> set = Stream.of("apple", "banana", "orange", "apple")
.collect(Collectors.toSet());
Collectors.toMap()
方法可以将流中的元素收集到一个 Map
中。需要提供两个函数,分别用于生成 Map
的键和值。
Map<String, Integer> map = Stream.of("apple", "banana", "orange")
.collect(Collectors.toMap(
fruit -> fruit, // Key
String::length // Value
));
Collectors.joining()
方法可以将流中的字符串元素连接成一个字符串。
String result = Stream.of("apple", "banana", "orange")
.collect(Collectors.joining(", "));
Collectors.groupingBy()
方法可以将流中的元素按照某个条件分组,生成一个 Map
。
Map<Integer, List<String>> grouped = Stream.of("apple", "banana", "orange", "apricot")
.collect(Collectors.groupingBy(String::length));
Collectors.partitioningBy()
方法可以将流中的元素按照某个条件分成两个分区,生成一个 Map<Boolean, List<T>>
。
Map<Boolean, List<String>> partitioned = Stream.of("apple", "banana", "orange", "apricot")
.collect(Collectors.partitioningBy(fruit -> fruit.length() > 5));
Collectors.summarizingInt()
、Collectors.summarizingLong()
和 Collectors.summarizingDouble()
方法可以生成一个统计对象,包含流中元素的统计信息,如最大值、最小值、平均值等。
IntSummaryStatistics stats = Stream.of("apple", "banana", "orange")
.collect(Collectors.summarizingInt(String::length));
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
除了使用 Collectors
提供的预定义收集器外,我们还可以通过实现 Collector
接口来创建自定义的收集器。自定义收集器需要实现以下四个方法:
supplier()
:提供一个容器来存储收集的元素。accumulator()
:定义如何将元素添加到容器中。combiner()
:定义如何合并两个容器(在并行流中使用)。finisher()
:定义如何将容器转换为最终的结果。Collector<String, List<String>, List<String>> customCollector = Collector.of(
ArrayList::new, // Supplier
List::add, // Accumulator
(left, right) -> { left.addAll(right); return left; }, // Combiner
Collector.Characteristics.IDENTITY_FINISH // Finisher
);
List<String> customList = Stream.of("apple", "banana", "orange")
.collect(customCollector);
Collectors
是 Java 8 中 Stream
API 的重要组成部分,提供了丰富的收集操作,能够满足大多数常见的收集需求。通过 Collectors
,我们可以轻松地将流中的元素收集到 List
、Set
、Map
等数据结构中,或者进行分组、分区、统计等操作。此外,我们还可以通过实现 Collector
接口来创建自定义的收集器,以满足特定的需求。
掌握 Collectors
的使用,可以让我们在处理集合数据时更加高效和简洁,充分发挥 Java 8 函数式编程的优势。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。