5

我在List<String>. 我需要List<Integer>。通过基本的方式,我将迭代并转换为 Integer。

有没有更好的解决方案?

4

9 回答 9

9

不行,没有别的办法。

但在这种情况下无法进行强制转换,您需要使用Integer.parseInt(stringValue).

List<String> listStrings = ... 
List<Integer> listIntegers = new ArrayList<Integer>(listStrings.size());
for(String current:listStrings){
  listIntegers.add(Integer.parseInt(current));
}
于 2013-08-02T13:54:58.087 回答
6

有一种方法可以做到这一点。

您可以使用适配器模式并创建一个类implements List<Integer>,但在内部访问您List<String>在整数和字符串之间的转换值。只要你履行了所有的契约,任何需要 a 的 APIList<Integer>都可以像使用 native 一样使用这个类List<Integer>

这可能看起来很麻烦且效率低下,但是当您需要将 a 传递List<Integer>给仅访问列表的某些值的 API 时,按需强制转换其中一些(“惰性评估”)而不是强制转换所有值会更有效他们。它还节省了内存,因为您不会同时在内存中同时拥有整个列表的字符串和整数表示。

于 2013-08-02T13:58:25.237 回答
1
for(String str : listOfString) {
    listOfInteger.add(Integer.valueOf(str));
}

没有直接的方法可以做到这一点。

于 2013-08-02T13:58:33.033 回答
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)
    }
});

据我记得,它会懒惰地转换每个项目。

于 2013-08-02T14:00:48.080 回答
1

Java 8 有一些新的解决方案:

List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());
于 2019-02-20T10:43:22.853 回答
0

没有明确和直接的方法来更改集合的参数化类型。您应该创建另一个并在修改数据时传输数据。

于 2013-08-02T13:55:33.683 回答
0

反之亦然。_

看起来循环是唯一的选择。如果你不想'想'自己循环,有一些可以使用的类(例如来自 Apache Commons)。

于 2013-08-02T13:56:11.643 回答
0

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

您必须遍历列表并解析每个新整数:

List<Integer> intList = new ArrayList<Integer>();
for(String numeric : stringList)
{
    intList.add(Integer.parseInt(numeric));
}
于 2013-08-02T13:56:36.910 回答
0

使用番石榴

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);
    }
});
于 2013-08-02T14:05:20.237 回答