关于Java:如何将List <String>转换为List <Integer>?

How to convert List<String> to List<Integer>?

我在List<String>中得到常量字符串。我需要List<Integer>。基本而言
我将迭代并转换为Integer。

有没有更好的解决方案?


不,没有其他方法。

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

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


有一种方法可以做到。

您可以使用适配器模式并创建一个implements List<Integer>的类,但在内部访问您的List<String>,以在Integer和String之间转换值。只要您履行所有合同,任何需要List<Integer>的API都可以像使用本机List<Integer>一样使用此类。

这似乎很麻烦且效率低下,但是当您需要将List<Integer>传递给仅访问列表中某些值的API时,按需强制转换其中的一些值会更有效("惰性评估"),而不是全部投射。它还可以节省内存,因为您不会同时在内存中同时拥有整个列表的字符串和整数表示。


对于Java 8,有一些新的解决方案:

1
List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());


查看Google Guava's Lists类,您可以执行以下操作:

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

据我所知,它将懒惰地变换每个项目。


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

没有直接的方法可以执行此操作。


使用番石榴:

1
2
3
4
5
6
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);
    }
});


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

您必须遍历列表,并将每个int解析为一个新的Integer:

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

已经解决了另一种方法。

看起来像循环是唯一的选择。如果您不希望自己循环,那么可以使用某些类(例如来自Apache Commons的类)。


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