我有一个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 ...
谢谢!
答案 0 :(得分:13)
进一步解释。 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,所以它填充了type参数,这意味着它需要Integer参数来调用方法。因为它能够将值从int自动变换为整数,所以没关系。
但是,这不起作用
List<Integer> list = Arrays.asList(new int[] { 1, 2, 3, 4} )
因为原始的包装器强制(即int []到Integer [])没有内置到语言中(不确定为什么他们没有这样做,但他们没有)。
因此,每个基本类型都必须按照自己的重载方法进行处理,这就是commons包的作用。即
public static List<Integer> asList(int i...);
答案 1 :(得分:7)
使用流:
// int[] nums = {1,2,3,4,5}
Set<Integer> set = Arrays.stream(nums).boxed().collect(Collectors.toSet())
答案 2 :(得分:5)
或者您可以轻松使用Guava将int[]
转换为List<Integer>
:
的 asList 强>
public static List<Integer> asList(int... backingArray)
返回由指定数组支持的固定大小列表,类似于
Arrays.asList(Object[])
。该列表支持List.set(int, Object)
,但任何将值设置为null
的尝试都会产生NullPointerException
。返回的列表维护写入或读取的
Integer
个对象的值,但不保留其身份。例如,未指定list.get(0) == list.get(0)
对于返回的列表是否为真。
答案 3 :(得分:5)
该问题会提出两个不同的问题:将<div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'station-form', 'options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'address') ?>
<?= $form->field($model, 'phone') ?>
<?= $form->field($model, 'price') ?>
<?= $form->field($model, 'square') ?>
<?= $form->field($model, 'content')->textarea() ?>
<?= $form->field($model, 'services_id[]')->checkboxList($items2) ?>
转换为int[]
并从Integer[]
创建HashSet<Integer>
。使用Java 8流很容易做到这两点:
int[]
答案 4 :(得分:3)
您可以在Apache Commons中使用ArrayUtils:
int[] intArray = { 1, 2, 3 };
Integer[] integerArray = ArrayUtils.toObject(intArray);
答案 5 :(得分:1)
另一种选择是使用Eclipse Collections中的原始集。您可以轻松地将int[]
转换为MutableIntSet
到Set<Integer>
或Integer[]
,如下所示,或者您可以使用MutableIntSet
更高效的内存和高性能。
int[] a = {1, 2, 3};
MutableIntSet intSet = IntSets.mutable.with(a);
Set<Integer> integerSet = intSet.collect(i -> i); // auto-boxing
Integer[] integerArray = integerSet.toArray(new Integer[]{});
如果你想直接从int数组转到Integer数组并保留顺序,那么这将有效。
Integer[] integers =
IntLists.mutable.with(a).collect(i -> i).toArray(new Integer[]{});
注意:我是Eclipse Collections的提交者
答案 6 :(得分:0)
只需使用以下代码段将数组中的元素添加到Set中
public class RemoveDuplicateElements {
public static void main(String args[]){
int array[] = {0,1,2,3,4,5,6,7,8,9,1,2,3,4,5};
Set <Integer> abc = new HashSet <Integer>();
for (Integer t:array){
abc.add(t);
}
System.out.println("sampleSet"+abc);
}
}