尝试将List <String>转换为List <Integer>时出错

Ivá*_*nez 0 java methods integer list java-stream

我目前正在尝试将转换List<String>List<Integer>带有流等。但是我不知道发生了什么。当它运行时,它给了我一些让我发狂的错误。

我已经尝试过(很少)从Java Streams中了解到的所有内容,也尝试过不使用它们,但是事实是我想以一种功能性的方式来实现它。我给我的方法(leeFichero)一个字符串f,它只是我的txt文件的路径。我想要的方法是返回一个List<Integer>带有值的a 。该文件的内容是这样的:

-3,-2,-1,0,1,2,3
1,3,5,7,9
100
2,4,6,8,10
Run Code Online (Sandbox Code Playgroud)
 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)

Nam*_*man 5

您应该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)