首页 > 解决方案 > 将整数数组转换为向量的最佳方法?在java中

问题描述

我有一个像

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

所以我希望它把它转换成我尝试过的向量

Vector<Integer> num= new Vector<Integer>(Arrays.asList(nums));

并得到了这个错误

java: method addAll in class java.util.Collections cannot be applied to given types;
  required: java.util.Collection<? super T>,T[]
  found:    java.util.Vector<java.lang.Integer>,int[]
  reason: inference variable T has incompatible bounds

有没有办法改变类型或比这更快的方法?

标签: javaarraysvector

解决方案


注意:在我回答问题之前,Vector 已被弃用,永远不应使用。你正在寻找List. 无论 Vector 有什么属性让你认为你需要它,我真的怀疑它。

这里的问题是List(and Vector) 是泛型的,泛型不能是原始类型。所以,int[]andInteger[]不是一回事,出于同样的原因,你不能随便把 anint[]变成List<Integer>. 相反,Arrays.asList(someIntArray)它会为您提供一个列表,其中只有一个元素,并且该列表是类型List<int[]>- 换句话说,nums被视为 int 数组列表的单个元素。

库中没有java.*将 anint[]转换为 a List<Integer>(或Vector<Integer>,自然而然)的方法。

一种简单的方法:

List<Integer> list = Arrays.stream(nums).mapToObj(x -> x).toList();

这将首先创建您的号码的 IntStream。然后它将值映射intInteger值,使用自动加糖的身份操作x -> Integer.valueOf(x)(如果您发现它更具可读性,那么继续像这样编写它),然后将整个事情变成一个列表。如果toList()不起作用-您使用的是 java pre-16,请编写.collect(Collectors.toList())而不是.toList().

如果您不喜欢上述内容,那么一个简单的 for 循环就可以完成这项工作。这同样有效:

List<Integer> list = new ArrayList<Integer>();
for (int n : nums) list.add(n);

推荐阅读