Ivá*_*nez 0 java methods integer list java-stream
我目前正在尝试将转换List<String>为List<Integer>带有流等。但是我不知道发生了什么。当它运行时,它给了我一些让我发狂的错误。
我已经尝试过(很少)从Java Streams中了解到的所有内容,也尝试过不使用它们,但是事实是我想以一种功能性的方式来实现它。我给我的方法(leeFichero)一个字符串f,它只是我的txt文件的路径。我想要的方法是返回一个List<Integer>带有值的a 。该文件的内容是这样的:
Run Code Online (Sandbox Code Playgroud)-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;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会显示以下错误消息:
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)
Run Code Online (Sandbox Code Playgroud)
您应该split的线路String使用的分隔符,和flatMap他们搜集的名单。
lineas = bf.lines()
.flatMap(s -> Arrays.stream(s.split(",")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
然后将List<Integer>映射返回为:
return lineas.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)