直接将List <String>转换为List <Integer>

AKI*_*WEB 54 java collections list arraylist

解析后我的文件"s"包含 AttributeGet:1,16,10106,10111

所以我需要在attributeIDGet List中获取冒号后面的所有数字.我知道有几种方法可以做到这一点.但是我们有什么方法可以直接转换List<String>List<Integer>. 由于下面的代码抱怨类型不匹配,所以我尝试做Integer.parseInt,但我想这对List不起作用.这是s字符串.

private static List<Integer> attributeIDGet = new ArrayList<Integer>();

if(s.contains("AttributeGet:")) {
    attributeIDGet = Arrays.asList(s.split(":")[1].split(","));
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 64

不,你需要遍历数组

for(String s : strList) intList.add(Integer.valueOf(s));
Run Code Online (Sandbox Code Playgroud)

  • 你写的是有效地循环这些值.但它仍然是一个优雅的解决方案.只是为了补充一点.使用新的lambda方法.`intList.addAll(strList.stream()地图(整数::的valueOf).collect(Collectors.toList()));` (4认同)
  • 快进5年,现在有以下答案,使用Java 8流在一行中完成此操作而不使用循环. (3认同)

Daw*_*ień 53

使用Java8:

stringList.stream().map(Integer::parseInt).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @Jagadeesh:如果字符串不是整数,则 Integer::parseInt 会抛出 NumberFormatException 。您可以使用 Apache Commons 中的 StringUtils::isNumeric 等过滤掉非整数元素。 (3认同)

小智 11

您可以使用 Java 8 的 Lambda 函数来实现此目的,而无需循环

    String string = "1, 2, 3, 4";
    List<Integer> list = Arrays.asList(string.split(",")).stream().map(s -> Integer.parseInt(s.trim())).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


小智 10

使用lambda:

strList.stream().map(org.apache.commons.lang3.math.NumberUtils::toInt).collect(Collectors.toList());


Mic*_*zia 9

番石榴转换器可以解决问题.

import com.google.common.base.Splitter;
import com.google.common.primitives.Longs;

final Iterable<Long> longIds = 
    Longs.stringConverter().convertAll(
        Splitter.on(',').trimResults().omitEmptyStrings()
            .splitToList("1,2,3"));
Run Code Online (Sandbox Code Playgroud)


Viv*_*ath 8

不,您将不得不迭代每个元素:

for(String number : numbers) {
   numberList.add(Integer.parseInt(number)); 
}
Run Code Online (Sandbox Code Playgroud)

发生这种情况的原因是没有直接的方法将一种类型的列表转换为任何其他类型.有些转换是不可能的,或者需要以特定方式完成.本质上,转换取决于所涉及的对象和转换的上下文,因此没有"一刀切"的解决方案.例如,如果你有一个Car对象和一个Person对象怎么办?你不能直接将a转换List<Car>为a List<Person>,因为它没有意义.


Nis*_*ant 7

如果您使用Google Guava库,则可以执行此操作,请参阅Lists#transform

    String s = "AttributeGet:1,16,10106,10111";


    List<Integer> attributeIDGet = new ArrayList<Integer>();

    if(s.contains("AttributeGet:")) {
        List<String> attributeIDGetS = Arrays.asList(s.split(":")[1].split(","));
        attributeIDGet =
        Lists.transform(attributeIDGetS, new Function<String, Integer>() {
            public Integer apply(String e) {
                return Integer.parseInt(e);
            };
        });
    }
Run Code Online (Sandbox Code Playgroud)

是的,同意上面的答案,它是臃肿,但时尚.但这只是另一种方式.