将 ArrayList<Integer> 转换成 ArrayList<Long> 是否可行?

7
在我的应用程序中,我想将一个包含整数对象的ArrayList转换为一个包含长整型对象的ArrayList。这是否可能?

你不能直接这样做。也许这篇帖子能帮到你:https://dev59.com/Cmw15IYBdhLWcg3wT6H2 - MikO
哦,诶各位。为什么你们要投反对票这个问题? - Shajeel Afzal
你的问题不是很清楚。你需要用一些代码来演示它。 - Bhesh Gurung
问题非常明确,但它并没有展示出任何努力。对于这种常见的问题,如果您包括您尝试过什么以及结果,通常会得到较少的负评。 - Leigh
3个回答

14

不是一行代码。

List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7,8,9);
int nInts = ints.size();
List<Long> longs = new ArrayList<Long>(nInts);
for (int i=0;i<nInts;++i) {
    longs.add(ints.get(i).longValue());
}

// 或者你可以在Java 8中使用Lambda表达式

List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7,8,9);
List<Long> longs = ints.stream()
        .mapToLong(Integer::longValue)
        .boxed().collect(Collectors.toList());

太棒了!没有你的答案我无法转换它!非常感谢! - Shajeel Afzal
有人可以给个提示吗,为什么在第二个例子中使用了boxed()方法?因为它在这里不是用于原始的'int'值... - montie

6
不行,因为泛型不具有多态性。即,ArrayList<Integer> 不是 ArrayList<Long> 的子类型,因此转换会失败。 因此,唯一的方法是遍历您的 List<Integer> 并将其添加到 List<Long> 中。
List<Long> longList = new ArrayList<Long>();
for(Integer i: intList){
longList.add(i.longValue());
}

谢谢!但是这个不起作用! - Shajeel Afzal
抱歉!我现在已经选择了正确的答案。 - Shajeel Afzal

0
ArrayList<Long> longList = new ArrayList<Long>();

Iterator<Integer> it = intList.iterator();
while(it.hasNext())
{
    Integer obj = it.next();
    longList.add(obj); //will automatically convert Int to Long
}

完成了....


这段代码甚至无法编译,因为这些对象类型不会自动转换。longList.add((long)obj); 或者其他解决方案都可以使用。 - T Tse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接