【发布时间】:2020-02-17 22:28:24
【问题描述】:
我目前正在尝试使用流等将List<String> 转换为List<Integer>。但我不知道发生了什么;当它运行时,它给了我一些让我发疯的错误。
我已经尝试了我(不太了解)从 Java 中的 Streams 中了解的所有内容,也尝试过不使用它们,但问题是我想以一种功能性的方式实现它。
我给我的方法 (leeFichero) 一个字符串 f,它就是我的 txt 文件的路径。我想要的方法就是返回一个List<Integer>,其中包含其中的值。
文件内容是这样的:
-3,-2,-1,0,1,2,3 1,3,5,7,9 100 2,4,6,8,10
public static List<Integer> leeFichero(String f) {
List<String>lineas=null;
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
lineas = bf.lines().collect(Collectors.toList());
bf.close();
} catch (IOException e) {
System.out.println(e.toString());
}
List<Integer> intList = lineas.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());
return intList;
}
当我运行它时,它给了我这个错误信息:
Exception in thread "main" java.lang.NumberFormatException: For input string: "-3,-2,-1,0,1,2,3"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at ejercicios.ejercicio1.lambda$0(ejercicio1.java:108)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at ejercicios.ejercicio1.leeFichero(ejercicio1.java:108)
at ejercicios.ejercicio1.main(ejercicio1.java:48)
【问题讨论】:
-
你需要用
,分割行 -
首先阅读错误信息。它告诉你你做错了什么。您正在尝试将字符串
"-3,-2,-1,0,1,2,3"解析为整数。合乎逻辑的结论是您解析文件的方式是错误的,因为它不是为文件中的每个整数返回一个字符串,而是返回一个包含所有整数的字符串。确实如此。您的解析逐行读取文件,但文件包含一行,其中包含许多用逗号分隔的整数。
标签: java list methods integer java-stream