如何将List <string>转换为List <integer>?</integer> </string>

时间:2013-08-02 13:50:34

标签: java string list generics

我在List<String>中获取常量字符串。我需要List<Integer>。通过基本的方式, 我将迭代并转换为Integer。

有没有更好的解决方案?

9 个答案:

答案 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)

这不仅仅是投射问题,因为StringInteger是根本不同的对象。

您必须循环遍历列表并在新的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);
    }
});