int []到Hashset(Java)

ent*_*spa 1 java arrays set java-8 java-stream

可能将Java int []数组的副本复制到HashSet <Integer>很难回答这么新的问题.

我有一套我想宣布的:

int[] flattened = Arrays.stream(arcs).flatMapToInt(Arrays::stream).toArray();
Set<Integer> set = new HashSet<Integer>(Arrays.asList(flattened));
Run Code Online (Sandbox Code Playgroud)

但由于返回类型Arrays.asList是一个列表本身,它无法解决.什么是将列表int[]转换为最佳方法Set<Integer>

YCF*_*F_L 5

..将int []列表转换为Set的最佳方法是什么

在这种情况下,您可以使用:

List<int[]> arcs = ...;
Set<Integer> set = arcs.stream()
        .flatMapToInt(Arrays::stream)
        .boxed()
        .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

示例:

List<int[]> arcs = new ArrayList<>(Arrays.asList(new int[]{1, 2, 3}, new int[]{3, 4, 6}));
Run Code Online (Sandbox Code Playgroud)

输出

[1, 2, 3, 4, 6]
Run Code Online (Sandbox Code Playgroud)

注意:正如杰克所说,为了保证收藏,HashSet你可以像这样收集:

...
.collect(Collectors.toCollection(() -> new HashSet<>()));
Run Code Online (Sandbox Code Playgroud)