我在List<String>
. 我需要List<Integer>
。通过基本的方式,我将迭代并转换为 Integer。
有没有更好的解决方案?
不行,没有别的办法。
但在这种情况下无法进行强制转换,您需要使用Integer.parseInt(stringValue)
.
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>
在整数和字符串之间的转换值。只要你履行了所有的契约,任何需要 a 的 APIList<Integer>
都可以像使用 native 一样使用这个类List<Integer>
。
这可能看起来很麻烦且效率低下,但是当您需要将 a 传递List<Integer>
给仅访问列表的某些值的 API 时,按需强制转换其中一些(“惰性评估”)而不是强制转换所有值会更有效他们。它还节省了内存,因为您不会同时在内存中同时拥有整个列表的字符串和整数表示。
for(String str : listOfString) {
listOfInteger.add(Integer.valueOf(str));
}
没有直接的方法可以做到这一点。
查看Google Guava's Lists
类,您可以执行以下操作:
List<Integer> result = Lists.transform(stringList, new Function<String, Integer>() {
@Override
public Integer apply(@Nullable String input) {
return Integer.parsInt(input)
}
});
据我记得,它会懒惰地转换每个项目。
Java 8 有一些新的解决方案:
List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());
没有明确和直接的方法来更改集合的参数化类型。您应该创建另一个并在修改数据时传输数据。
反之亦然。_
看起来循环是唯一的选择。如果你不想'想'自己循环,有一些可以使用的类(例如来自 Apache Commons)。
这不仅仅是铸造的问题,因为String
和Integer
是根本不同的对象。
您必须遍历列表并解析每个新整数:
List<Integer> intList = new ArrayList<Integer>();
for(String numeric : stringList)
{
intList.add(Integer.parseInt(numeric));
}
使用番石榴:
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);
}
});