为了账号安全,请及时绑定邮箱和手机立即绑定

int[] 到 Hashset (Java)

int[] 到 Hashset (Java)

四季花海 2021-12-10 10:46:39
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>
查看完整描述

2 回答

?
jeck猫

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<>()));


查看完整回答
反对 回复 2021-12-10
?
繁星点点滴滴

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<>()));


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信