繁体   English   中英

如何转换List <String> 列表 <Integer> ?

[英]How to convert List<String> to List<Integer>?

我在List<String>获取常量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> ,在Integer和String之间转换值。 只要您履行所有合同,任何需要List<Integer> API都可以使用此类,就像使用本机List<Integer>

这可能看起来很麻烦且效率低下,但是当您需要将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)。

这不仅仅是一个构建问题,因为StringInteger是根本不同的对象。

您必须循环遍历列表并在每个整数中解析一个新的整数:

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);
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM