猿问

int[] 到 Hashset (Java)

Java int[] 数组到 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>


四季花海
浏览 430回答 2
2回答

jeck猫

..将int[] 列表转换为 Set的最佳方法是什么在这种情况下,您可以使用:List<int[]> arcs = ...;Set<Integer> set = arcs.stream()&nbsp; &nbsp; &nbsp; &nbsp; .flatMapToInt(Arrays::stream)&nbsp; &nbsp; &nbsp; &nbsp; .boxed()&nbsp; &nbsp; &nbsp; &nbsp; .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<>()));

繁星点点滴滴

您应该能够将其作为单行来执行,如下所示: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)&nbsp; .collect(Collectors.toCollection(() -> new HashSet<>()));正如 DodgyCodeException 指出的那样,OP 的示例还有一个我没有解决的额外问题,因此请使用以下方法进行调整:Set<Integer> set = Arrays.stream(arcs)&nbsp; &nbsp; .flatMapToInt(Arrays::stream)&nbsp; &nbsp; .boxed() // <-- converts from IntStream to Stream<Integer>&nbsp; &nbsp; .collect(Collectors.toCollection(() -> new HashSet<>()));
随时随地看视频慕课网APP

相关分类

Java
我要回答