Java int[] array to HashSet<Integer>

2022-08-31 20:12:59

我有一个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 ...

谢谢!


答案 1

使用流:

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

答案 2

该问题提出了两个单独的问题:转换为 和 从 创建 。两者都很容易用Java 8流完成:int[]Integer[]HashSet<Integer>int[]

int[] array = ...
Integer[] boxedArray = IntStream.of(array).boxed().toArray(Integer[]::new);
Set<Integer> set = IntStream.of(array).boxed().collect(Collectors.toSet());
//or if you need a HashSet specifically
HashSet<Integer> hashset = IntStream.of(array).boxed()
    .collect(Collectors.toCollection(HashSet::new));