74

解析我的文件“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(","));
}
4

14 回答 14

86

使用 Java8:

stringList.stream().map(Integer::parseInt).collect(Collectors.toList());
于 2016-05-06T13:17:06.773 回答
75

不,您需要遍历数组

for(String s : strList) intList.add(Integer.valueOf(s));
于 2012-05-22T17:12:01.467 回答
11

使用 lambda:

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

于 2015-10-19T14:53:35.263 回答
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"));
于 2015-03-12T14:20:13.097 回答
8

不,您必须遍历每个元素:

for(String number : numbers) {
   numberList.add(Integer.parseInt(number)); 
}

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

于 2012-05-22T17:10:07.377 回答
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);
            };
        });
    }

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

于 2012-05-22T17:17:55.490 回答
6

您可以使用 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());
于 2015-11-18T02:18:32.697 回答
4

为什么不使用流将字符串列表转换为整数列表?像下面

List<String> stringList = new ArrayList<String>(Arrays.asList("10", "30", "40",
            "50", "60", "70"));
List<Integer> integerList = stringList.stream()
            .map(Integer::valueOf).collect(Collectors.toList());

完整的操作可能是这样的

String s = "AttributeGet:1,16,10106,10111";
List<Integer> integerList = (s.startsWith("AttributeGet:")) ?
    Arrays.asList(s.replace("AttributeGet:", "").split(","))
    .stream().map(Integer::valueOf).collect(Collectors.toList())
    : new ArrayList<Integer>();
于 2014-11-20T19:02:45.113 回答
3

如果允许您使用 Java 8 中的 lambda,则可以使用以下代码示例。

final String text = "1:2:3:4:5";
final List<Integer> list = Arrays.asList(text.split(":")).stream()
  .map(s -> Integer.parseInt(s))
  .collect(Collectors.toList());
System.out.println(list);

不使用外部库。普通的旧新Java!

于 2014-05-05T14:43:05.537 回答
2

使用 Streams 和 Lambda:

newIntegerlist = listName.stream().map(x-> 
    Integer.valueOf(x)).collect(Collectors.toList());

上面这行代码会将 List 类型转换List<String>List<Integer>.

我希望它是有帮助的。

于 2019-03-01T19:46:29.303 回答
1

不,没有办法(据我所知)在 Java 中这样做。

基本上,您必须将每个条目从字符串转换为整数。

您正在寻找的内容可以用更实用的语言来实现,您可以在其中传递一个转换函数并将其应用于列表的每个元素......但这是不可能的(它仍然适用于列表中的每个元素)。

矫枉过正:

但是,您可以使用来自 Google Guava (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Function.html) 的函数来模拟更实用的方法,如果那样的话就是你要找的。

如果您担心对列表进行两次迭代,那么不要使用拆分器,而是在添加到列表之前将每个整数标记转换为整数。

于 2012-05-22T17:12:17.853 回答
0

这是另一个展示番石榴力量的例子。虽然,这不是我编写代码的方式,但我想将它们打包在一起,以展示 Guava 为 Java 提供了什么样的函数式编程。

Function<String, Integer> strToInt=new Function<String, Integer>() {
    public Integer apply(String e) {
         return Integer.parseInt(e);
    }
};
String s = "AttributeGet:1,16,10106,10111";

List<Integer> attributeIDGet =(s.contains("AttributeGet:"))?
  FluentIterable
   .from(Iterables.skip(Splitter.on(CharMatcher.anyOf(";,")).split(s)), 1))
   .transform(strToInt)
   .toImmutableList():
   new ArrayList<Integer>();
于 2012-05-23T23:49:38.710 回答
0

使用 Guava 变换方法如下,

列表 intList = Lists.transform(stringList, Integer::parseInt);

于 2020-05-26T18:15:47.440 回答
0

导入 java.util.Arrays;导入 java.util.Scanner;

公共类reto1 {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
        double suma = 0, promedio = 0;
        String IRCA = "";
        int long_vector = Integer.parseInt(input.nextLine());    
        int[] Lista_Entero = new int[long_vector];       // INSTANCE INTEGER LIST
        String[] lista_string = new String[long_vector]; // INSTANCE STRING LIST
        Double[] lista_double = new Double[long_vector];
        lista_string = input.nextLine().split(" ");     //  INPUT STRING LIST
    input.close();

    for (int i = 0; i < long_vector; i++) {
        Lista_Entero[i] = Integer.parseInt(lista_string[i]); // CONVERT INDEX TO INDEX FROM STRING UNTIL INTEGER AND ASSIGNED TO NEW INTEGER LIST
        suma = suma + Lista_Entero[i];
    }
于 2021-07-20T23:10:25.473 回答