下麵給出了一些可用於在 Java 中將 Stream 轉換為 Set 的方法。
方法一:使用Collector
Stream collect() 方法從流中獲取元素並將它們存儲在集合中。collect(Collector.toSet()) 將流中的元素收集到集合中。
Stream.collect() 方法可用於收集容器中流的元素。可以傳遞由 Collectors.toSet() 返回的 Collector,它將流的元素累積到一個新的 Set 中。
// Java code for converting
// Stream to Set using Collectors
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// Creating a Stream of Integers
Stream<Integer> stream = Stream.of(-2, -1, 0, 1, 2);
// Using Stream.collect() to collect the
// elements of stream in a container.
Set<Integer> streamSet = stream.collect(Collectors.toSet());
// Displaying the elements
streamSet.forEach(num -> System.out.println(num));
}
}
輸出:
-1 0 -2 1 2
方法二:將Stream轉為Array再轉為Set
Stream轉Set的問題可以分為兩部分:
1) Convert Stream to an Array 2) Convert Array to a Set
// Java code for converting
// Stream to Set using Divide
// and Conquer
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// Creating a Stream of Strings
Stream<String> stream = Stream.of("G", "E", "K", "S");
// Converting Stream into an Array
String[] arr = stream.toArray(String[]::new);
// Creating a HashSet
Set<String> set = new HashSet<>();
// Converting Array to set
Collections.addAll(set,arr);
// Displaying the elements
set.forEach(str -> System.out.println(str));
}
}
輸出:
S E G K
注意:輸出是隨機的,因為 HashSet 以隨機順序將輸入作為生成的哈希值。
方法三:使用 forEach
Stream 可以使用 forEach() 轉換為 Set。使用 forEach() 方法循環遍曆流的所有元素,然後使用 set.add() 將每個元素添加到一個空集合中。
// Java code for converting
// Stream to Set using forEach
import java.util.*;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class GFG {
// Driver code
public static void main(String[] args) {
// Creating a Stream of Integers
Stream<Integer> stream = Stream.of(5, 10, 15, 20, 25);
// Creating a HashSet
Set<Integer> set = new HashSet<>();
// using set.add() to add elements
// of stream into empty set
stream.forEach(set::add);
// Displaying the elements
set.forEach(num -> System.out.println(num));
}
}
輸出:
20 5 25 10 15
注意:如果 Stream 是並行的,則元素可能不會使用 forEach() 方法按原始順序處理。為了保留原始順序,使用了 forEachOrdered() 方法。
相關用法
- Java Stream.of()和Arrays.stream()的區別用法及代碼示例
- Java Set轉Stream用法及代碼示例
- Java List轉Stream用法及代碼示例
- Java Stream轉Array用法及代碼示例
- Java Boxed Array轉Stream用法及代碼示例
- Java Primitive Array轉Stream用法及代碼示例
- Java Map轉Stream用法及代碼示例
- Java Iterator轉Stream用法及代碼示例
- Java Iterable轉Stream用法及代碼示例
- Java Stream轉Map用法及代碼示例
- Java stream.limit()用法及代碼示例
- Java Stream skip()用法及代碼示例
- Java Stream.reduce()用法及代碼示例
- Java Stream.concat()用法及代碼示例
- Java Stream.distinct()用法及代碼示例
- Java Stream sorted()用法及代碼示例
- Java Stream.max()用法及代碼示例
- Java Stream sorted(Comparator comparator)用法及代碼示例
注:本文由純淨天空篩選整理自Sahil_Bansall大神的英文原創作品 Convert Stream to Set in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。