如何将 List<String> 转换为 List<Integer>?

5
我得到了一个由List<String>表示的常量字符串列表,我需要List<Integer>。按照基本方法,我将遍历并转换为整数。
是否有更好的解决方案?

什么是常量?像"123"这样的东西? - user1907906
很抱歉,您需要创建一个新列表并解析并将每个元素添加到新列表中。 - user902383
从来没有听说过有任何“更好”的解决方案。(无论“更好”意味着什么) - m0skit0
1
为什么这个问题被投票否决了?它是一个好问题。 - bjedrzejewski
9个回答

9

不,没有其他方法。

但在这种情况下无法进行强制转换,您需要使用 Integer.parseInt(stringValue)

List<String> listStrings = ... 
List<Integer> listIntegers = new ArrayList<Integer>(listStrings.size());
for(String current:listStrings){
  listIntegers.add(Integer.parseInt(current));
}

我们可以这样使用吗?首先将List list = listStrings赋值,然后将list分配给List<Integer>。 - messi
你试过了吗? - f1sh

6

有一种方法可以做到这一点。

你可以使用 适配器模式 创建一个类,该类 implements List<Integer>,但在内部访问你的 List<String> 并在整数和字符串之间进行转换。只要你满足所有契约,任何需要 List<Integer> 的 API 都能像原生 List<Integer> 一样使用这个类。

这可能看起来很繁琐和低效,但当你需要将 List<Integer> 传递给一个只访问列表某些值的 API 时,按需转换一些值("惰性评估")可能更高效,而不是转换所有值。它还能节省内存,因为你不会同时在内存中保存整个列表的字符串和整数表示。


你在思考模式。我喜欢这个。 - f1sh
这是一个创意的答案,实际上让这个问题变得有价值 :) - bjedrzejewski

1
使用Java 8,有一些新的解决方案:
List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());

1
for(String str : listOfString) {
    listOfInteger.add(Integer.valueOf(str));
}

没有直接的方法来实现这个。


1

看看 Google GuavaLists 类,你可以这样做:

List<Integer> result = Lists.transform(stringList, new Function<String, Integer>() {
    @Override
    public Integer apply(@Nullable String input) {
        return Integer.parsInt(input)
    }
});

据我所记,它会惰性地转换每个项目。

0

这不仅仅是一个转换的问题,因为StringInteger是根本不同的对象。

您必须循环遍历列表并将每个值解析为新的整数:

List<Integer> intList = new ArrayList<Integer>();
for(String numeric : stringList)
{
    intList.add(Integer.parseInt(numeric));
}

0

使用guava

List<String> strings = Lists.newArrayList("1", "2", "3");
List<Integer> ints = Lists.transform(strings, new Function<String, Integer>(){
    public Integer apply(String input) {
        return Integer.valueOf(input);
    }
});

2
对于Guava 16.0+:new ArrayList<>(Lists.transform(listOfStrings, Longs.stringConverter())) - LateralFractal
@LateralFractal:甚至可以更短,只需:Lists.transform(listOfStrings, Ints.stringConverter()) - Jacob van Lingen

0

没有一种明确和直接的方法来更改集合的参数化类型。您应该创建另一个集合,在修改数据的同时转移数据。


0

另一种方法已经被回答了。

看起来循环是唯一的选择。如果你不想自己循环,可以使用一些类(例如来自Apache Commons的类)。


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