可能是Java int[] array to HashSet<Integer>的副本,但未能回答如此新的问题。
我有一个要声明的集合:
int[] flattened = Arrays.stream(arcs).flatMapToInt(Arrays::stream).toArray();
Set<Integer> set = new HashSet<Integer>(Arrays.asList(flattened));
,但是由于Arrays.asList
的返回类型本身就是一个列表,因此无法解析。
将int[]
的列表转换为Set<Integer>
答案 0 :(得分:5)
..将int []的列表转换为 设置
在这种情况下,您可以使用:
List<int[]> arcs = ...;
Set<Integer> set = arcs.stream()
.flatMapToInt(Arrays::stream)
.boxed()
.collect(Collectors.toSet());
示例:
List<int[]> arcs = new ArrayList<>(Arrays.asList(new int[]{1, 2, 3}, new int[]{3, 4, 6}));
输出
[1, 2, 3, 4, 6]
注意:如Jack所述,要确保收藏为HashSet
,您可以这样收集:
...
.collect(Collectors.toCollection(() -> new HashSet<>()));
答案 1 :(得分:4)
您应该能够像这样单线操作:
Set<Integer> set = Arrays.stream(arcs).flatMapToInt(Arrays::stream).collect(Collectors.toSet());
已更新:杰克在下面的评论中说,不能保证Collectors.toSet()返回一个HashSet-实际上,我认为通常会这样做,但不能保证-因此使用它会更好:
Set<Integer> set = Arrays.stream(arcs).flatMapToInt(Arrays::stream)
.collect(Collectors.toCollection(() -> new HashSet<>()));
正如DodgyCodeException所指出的那样,OP的示例还有一个我没有解决的附加问题,因此请使用以下方法进行调整:
Set<Integer> set = Arrays.stream(arcs)
.flatMapToInt(Arrays::stream)
.boxed() // <-- converts from IntStream to Stream<Integer>
.collect(Collectors.toCollection(() -> new HashSet<>()));