📜  Java流 | Java中的收集器 toCollection()(1)

📅  最后修改于: 2023-12-03 15:16:36.137000             🧑  作者: Mango

Java Stream | Java中的收集器 toCollection()

在Java中,流(Stream)是一种强大的数据处理方式,而在流处理结束后,我们通常需要将流中的元素收集起来并转换为一个集合(collection)或数据结构。

Java中提供了一个收集器(collector)框架,可以用于将流中的元素收集到不同的集合类型中,例如List、Set等等。其中,toCollection()是该框架中一个强大的收集器,它可以将一个流转换为任何指定类型的集合。

toCollection()的语法

toCollection()方法是Collectors类中的一个静态方法,其语法如下所示:

public static <T, C extends Collection<T>> Collector<T, ?, C> toCollection(Supplier<C> collectionFactory)

其中:

  • T是流中元素的类型;
  • C是指定集合类型,必须是Collection类或其子类;
  • collectionFactory是一个供应商(Supplier)函数,用于创建一个新的集合实例。

toCollection()方法返回一个collect()方法可以接受的Collector类型。

toCollection()的用法

假设我们有一个字符串列表,现在我们想要将其转换为LinkedHashSet类型的集合:

List<String> stringList = Arrays.asList("Java", "Python", "C++", "Go", "Java", "Python");
LinkedHashSet<String> linkedHashSet = stringList.stream()
                                                .collect(Collectors.toCollection(LinkedHashSet::new));
System.out.println(linkedHashSet);  

输出结果如下所示:

[Java, Python, C++, Go]

首先,我们定义了一个字符串列表stringList。接着,我们通过调用stream()方法将其转换为一个流,并使用toCollection()方法指定LinkedHashSet类型作为集合类型。在集合类型中,我们使用了一个构造函数引用(LinkerHashSet::new)来创建新的LinkedHashSet实例,该实例将用于保存我们要收集的数据。

最后,我们调用collect()方法对流进行收集。

另外,如果我们需要创建其他类型的集合,例如TreeSet、ArrayList等,只需要在指定集合类型时更改传入的类即可。

总结

Java中提供了丰富的收集器(collector)框架,其中toCollection()是其中一个最常用的收集器,可以将流中的元素收集到任何指定类型的集合中。使用toCollection()方法,我们可以轻松地将流转换为需要的集合类型,并进行后续处理。