我得到了一个由
是否有更好的解决方案?
List<String>
表示的常量字符串列表,我需要List<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>
并在整数和字符串之间进行转换。只要你满足所有契约,任何需要 List<Integer>
的 API 都能像原生 List<Integer>
一样使用这个类。
这可能看起来很繁琐和低效,但当你需要将 List<Integer>
传递给一个只访问列表某些值的 API 时,按需转换一些值("惰性评估")可能更高效,而不是转换所有值。它还能节省内存,因为你不会同时在内存中保存整个列表的字符串和整数表示。
List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());
for(String str : listOfString) {
listOfInteger.add(Integer.valueOf(str));
}
没有直接的方法来实现这个。
看看 Google Guava
的 Lists
类,你可以这样做:
List<Integer> result = Lists.transform(stringList, new Function<String, Integer>() {
@Override
public Integer apply(@Nullable String input) {
return Integer.parsInt(input)
}
});
这不仅仅是一个转换的问题,因为String
和Integer
是根本不同的对象。
您必须循环遍历列表并将每个值解析为新的整数:
List<Integer> intList = new ArrayList<Integer>();
for(String numeric : stringList)
{
intList.add(Integer.parseInt(numeric));
}
使用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);
}
});
new ArrayList<>(Lists.transform(listOfStrings, Longs.stringConverter()))
- LateralFractalLists.transform(listOfStrings, Ints.stringConverter())
。 - Jacob van Lingen没有一种明确和直接的方法来更改集合的参数化类型。您应该创建另一个集合,在修改数据的同时转移数据。
"123"
这样的东西? - user1907906