在Java中将流转换为集合
下面给出了一些可以用来将Java中的Stream转换为Set的方法。
方法1:使用Collectors
Stream collect()方法将流中的元素提取出来并存储在一个集合中。 collect(Collector.toSet()) 将流中的元素收集到一个Set中。
Stream.collect()方法可以用来收集流中的元素。将Collectors.toSet()返回的Collector传递进去,该Collector累积流的元素到一个新的Set中。
// Java代码将
// Stream转换为Set使用Collectors
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// 创建一个整数流
Stream<Integer> stream = Stream.of(-2, -1, 0, 1, 2);
// 使用Stream.collect()将流的元素收集到一个集合中。
Set<Integer> streamSet = stream.collect(Collectors.toSet());
// 显示元素
streamSet.forEach(num -> System.out.println(num));
}
}
-1
0
-2
1
2
方法2:先将流转换为数组,再将数组转换为集合
将流转换为Set的问题可以分为两部分:
1)将流转换为数组
2)将数组转换为Set
// Java代码将
// Stream转换为Set使用分而治之法
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// 创建一个字符串流
Stream<String> stream = Stream.of("G", "E", "K", "S");
// 将流转换为数组
String[] arr = stream.toArray(String[] :: new);
// 创建一个HashSet
Set<String> set = new HashSet<>();
// 将数组转换为Set
Collections.addAll(set,arr);
// 显示元素
set.forEach(str -> System.out.println(str));
}
}
S
E
G
K
注意:输出是随机的,因为HashSet按生成的哈希值的顺序获取输入。
方法3:使用forEach
可以使用forEach()将Stream转换为Set。使用forEach()方法循环遍历流中的所有元素,然后使用set.add()将每个元素添加到空集中。
// Java代码将
// Stream转换为Set使用forEach
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// 创建一个整数流
Stream<Integer> stream = Stream.of(5, 10, 15, 20, 25);
// 创建一个HashSet
Set<Integer> set = new HashSet<>();
// 使用set.add()将流的元素添加到空集中
stream.forEach(set::add);
// 显示元素
set.forEach(num -> System.out.println(num));
}
}
20
5
25
10
15
注意: 如果流是并行的,那么使用forEach()方法时元素的处理顺序可能不是原始顺序。为了保留原始顺序,应该使用forEachOrdered()方法。
极客教程