2 回答
TA贡献1909条经验 获得超7个赞
..将int[] 列表转换为 Set的最佳方法是什么
在这种情况下,您可以使用:
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]
注意:正如杰克提到的,为了保证收集是HashSet你可以像这样收集:
...
.collect(Collectors.toCollection(() -> new HashSet<>()));
TA贡献1803条经验 获得超3个赞
您应该能够将其作为单行来执行,如下所示:
Set<Integer> set = Arrays.stream(arcs).flatMapToInt(Arrays::stream).collect(Collectors.toSet());
更新:Jack 在下面评论说 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<>()));
添加回答
举报