📌  相关文章
📜  在Java中将 Stream 转换为 Set

📅  最后修改于: 2022-05-13 01:55:15.693000             🧑  作者: Mango

在Java中将 Stream 转换为 Set

下面给出了一些可用于在Java中将 Stream 转换为 Set 的方法。

方法一:使用收集器

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 stream = Stream.of(-2, -1, 0, 1, 2);
      
    // Using Stream.collect() to collect the 
    // elements of stream in a container.
    Set streamSet = stream.collect(Collectors.toSet());
      
    // Displaying the elements
    streamSet.forEach(num -> System.out.println(num));
    }
}
输出:
-1
0
-2
1
2

方法 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 stream = Stream.of("G", "E", "K", "S");
      
    // Converting Stream into an Array
    String[] arr = stream.toArray(String[] :: new);
      
    // Creating a HashSet
    Set 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 以随机顺序将输入作为生成的哈希值。

方法 3:使用 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 stream = Stream.of(5, 10, 15, 20, 25);
  
    // Creating a HashSet
    Set 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中将 Set 转换为 Stream