How to convert List<String> to List<Integer>?
我在List<String>中得到常量字符串。我需要List<Integer>。基本而言
我将迭代并转换为Integer。
有没有更好的解决方案?
- 什么常数? "123",像这样吗?
-
我担心您必须创建新列表并解析并将每个元素添加到新列表中
-
从来没有听说过更好的解决方案。
-
为什么这被否决?这是一个好问题。
不,没有其他方法。
但是在这种情况下无法进行强制转换,您需要使用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 ));
} |
- 我们可以这样使用吗?首先分配列表list = listStrings,然后将列表分配给List <Integer>。
-
你试过了吗?
有一种方法可以做到。
您可以使用适配器模式并创建一个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 );
}
}); |
-
或对于番石榴16.0:new ArrayList<>(Lists.transform(listOfStrings, Longs.stringConverter()))
-
@LateralFractal:可能更短,只是:Lists.transform(listOfStrings, Ints.stringConverter())
这不仅仅是强制转换的问题,因为String和Integer是根本不同的对象。
您必须遍历列表,并将每个int解析为一个新的Integer:
1 2 3 4 5
| List <Integer > intList = new ArrayList <Integer >();
for(String numeric : stringList )
{
intList. add(Integer. parseInt(numeric ));
} |
已经解决了另一种方法。
看起来像循环是唯一的选择。如果您不希望自己循环,那么可以使用某些类(例如来自Apache Commons的类)。
没有明确直接的方法来更改集合的参数化类型。您应该创建另一个数据,并在修改数据的同时传输数据。