我在List<String>
中获取常量字符串。我需要List<Integer>
。通过基本的方式,
我将迭代并转换为Integer。
有没有更好的解决方案?
答案 0 :(得分:9)
不,没有别的办法。
但在这种情况下无法进行投射,您需要使用Integer.parseInt(stringValue)
。
List<String> listStrings = ...
List<Integer> listIntegers = new ArrayList<Integer>(listStrings.size());
for(String current:listStrings){
listIntegers.add(Integer.parseInt(current));
}
答案 1 :(得分:6)
有一种方法可以做到这一点。
您可以使用Adapter Pattern并创建一个implements List<Integer>
的类,但在内部访问您的List<String>
转换Integer和String之间的值。只要您履行所有合同,任何需要List<Integer>
的API都可以使用此类,就像使用原生List<Integer>
一样。
这可能看起来很麻烦且效率低下,但是当您需要将List<Integer>
传递给仅访问列表的某些值的API时,按需投射其中一些值会更高效(&# 34;延迟评估&#34;)而不是全部投射。它还节省了内存,因为你不会同时在内存中同时拥有整个列表的字符串和整数表示。
答案 2 :(得分:1)
for(String str : listOfString) {
listOfInteger.add(Integer.valueOf(str));
}
没有直接的方法可以做到这一点。
答案 3 :(得分:1)
查看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)
}
});
据我记忆,它会懒洋洋地改变每个项目。
答案 4 :(得分:1)
对于Java 8,有一些新的解决方案:
List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());
答案 5 :(得分:0)
没有明确而直接的方法来更改集合的参数化类型。您应该创建另一个并在修改数据时传输数据。
答案 6 :(得分:0)
另一种方式是answered。
看起来循环是唯一的选择。如果你不想“循环”自己,可以使用一些类(例如来自Apache Commons)。
答案 7 :(得分:0)
这不仅仅是投射问题,因为String
和Integer
是根本不同的对象。
您必须循环遍历列表并在新的Integer中解析每个:
List<Integer> intList = new ArrayList<Integer>();
for(String numeric : stringList)
{
intList.add(Integer.parseInt(numeric));
}
答案 8 :(得分: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);
}
});