Java int\[\] 数组到 HashSet<Integer>

新手上路,请多包涵

我有一个 int 数组:

 int[] a = {1, 2, 3};

我需要一个类型集:

 Set<Integer> s;

如果我执行以下操作:

 s = new HashSet(Arrays.asList(a));

当然,它认为我的意思是:

 List<int[]>

而我的意思是:

 List<Integer>

这是因为 int 是原始类型。如果我使用了 String,一切都会起作用:

 Set<String> s = new HashSet<String>(
    Arrays.asList(new String[] { "1", "2", "3" }));

如何轻松、正确、简洁地从:

 A) int[] a...

B) Integer[] a ...

谢谢!

原文由 Robottinosino 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 842
2 个回答

一些进一步的解释。 asList 方法具有此签名

public static <T> List<T> asList(T... a)

所以如果你这样做:

 List<Integer> list = Arrays.asList(1, 2, 3, 4)

或这个:

 List<Integer> list = Arrays.asList(new Integer[] { 1, 2, 3, 4 })

在这些情况下,我相信 java 能够推断出您想要一个 List 返回,因此它填充了类型参数,这意味着它需要 Integer 参数来调用方法。因为它能够自动装箱从 int 到 Integer 的值,所以没问题。

但是,这不起作用

List<Integer> list = Arrays.asList(new int[] { 1, 2, 3, 4} )

因为从原始到包装器的强制转换(即 int[] 到 Integer[])没有内置到语言中(不知道他们为什么不这样做,但他们没有这样做)。

因此,每个基本类型都必须作为它自己的重载方法来处理,这就是 commons 包所做的。 IE。

 public static List<Integer> asList(int i...);

原文由 Matt 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用流:

 // int[] nums = {1,2,3,4,5}
Set<Integer> set = Arrays.stream(nums).boxed().collect(Collectors.toSet())

原文由 Liam.Nguyen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题