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

解析文件后,“ s”包含 AttributeGet:1,16,10106,10111

所以我需要得到属性 IDGet List 中冒号后面的所有数字。我知道有几种方法可以做到这一点。但是有没有什么办法我们可以 < strong > 直接将 List<String>转换成 List<Integer>。 由于下面的代码抱怨 Type 不匹配,所以我尝试使用 Integer.parseInt,但我猜这对 List 不起作用。这是 String。

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


if(s.contains("AttributeGet:")) {
attributeIDGet = Arrays.asList(s.split(":")[1].split(","));
}
172940 次浏览

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

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

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

不,你需要遍历数组

for(String s : strList) intList.add(Integer.valueOf(s));

不,在 Java 中(据我所知)不可能做到这一点。

基本上,您必须将每个条目从 String 转换为 Integer。

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

过度杀伤:

然而,如果你想要的话,你可以使用 Google Guava ( http://docs.Guava-libraries.googlecode.com/git/javadoc/com/Google/common/base/Function.html )中的 Function 来模拟一种更加实用的方法。

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

如果您使用 谷歌番石榴图书馆,这是您可以做的,请参阅 列表 # 转换

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

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

这是另一个展示番石榴威力的例子。尽管这不是我编写代码的方式,但我想把它们打包在一起,展示 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>();

如果允许使用 Java8中的 lambdas,则可以使用以下代码示例。

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!

为什么不使用 stream 来将 List of String 转换为 List of int? 比如下面

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

使用 lambda:

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

您可以使用 Java8的 Lambda 函数来实现这一点,而不需要循环

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

使用 Java8:

stringList.stream().map(Integer::parseInt).collect(Collectors.toList());

使用 Streams 和 Lambda:

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

以上代码行将把类型 List<String>的 List 转换为 List<Integer>

我希望这对你有帮助。

使用如下的番石榴转换方法,

List intList = Lists.change (stringList,Integer: : parseInt) ;

导入 java.util. 数组; 导入 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];
}