Java 尝试转换列表时出错<;字符串>;列出<;整数>;

Java 尝试转换列表时出错<;字符串>;列出<;整数>;,java,list,methods,integer,java-stream,Java,List,Methods,Integer,Java Stream,我目前正在尝试将列表转换为带有流的列表,等等。但我不知道发生了什么;当它运行时,它给了我一些让我发疯的错误 我已经尝试了我从Java中的Streams(很差)知道的所有东西,也尝试过不使用它们,但问题是我想以一种功能化的方式来实现它。 我给我的方法(Leefichor)一个字符串f,它就是我的txt文件的路径。我想要这个方法做的就是返回一个包含值的列表。 该文件的内容如下: 您应该使用delimeter、和flatMap将字符串的行拆分为一个列表 lineas = bf.lines()

我目前正在尝试将
列表
转换为带有流的
列表
,等等。但我不知道发生了什么;当它运行时,它给了我一些让我发疯的错误

我已经尝试了我从Java中的Streams(很差)知道的所有东西,也尝试过不使用它们,但问题是我想以一种功能化的方式来实现它。 我给我的方法(Leefichor)一个字符串f,它就是我的txt文件的路径。我想要这个方法做的就是返回一个包含值的
列表。
该文件的内容如下:


您应该使用delimeter
flatMap
字符串的行拆分为一个列表

lineas = bf.lines()
        .flatMap(s -> Arrays.stream(s.split(",")))
        .collect(Collectors.toList());
然后返回映射为以下内容的
列表

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

首先,我看不出您的方法中有许多临时变量的用途。其次,我更喜欢编译的
模式
用于拆分行(这里
\\s*
用于使用数字和逗号之间的任何空格)。倾向于手动资源管理。然后,如前所述,使用
flapMap()
,然后使用
map()
——但我会直接返回结果。大概

public static List<Integer> leeFichero(String f) {
    Pattern p = Pattern.compile("\\s*,\\s*");
    try (BufferedReader bf = new BufferedReader(new FileReader(f))) {
        return bf.lines().flatMap(s -> Arrays.stream(p.split(s)))
                .map(Integer::valueOf).collect(Collectors.toList());
    } catch (IOException e) {
        System.out.println(e.toString());
    }
    return new ArrayList<>();
}
公共静态列表leefichor(字符串f){
模式p=模式。编译(\\s*,\\s*);
try(BufferedReader bf=new BufferedReader(new FileReader(f))){
返回bf.lines().flatMap->Arrays.stream(p.split)
.map(Integer::valueOf).collect(Collectors.toList());
}捕获(IOE异常){
System.out.println(例如toString());
}
返回新的ArrayList();
}

您需要使用
拆分行,
从读取错误消息开始。它告诉你你做错了什么。您试图将字符串
“-3,-2,-1,0,1,2,3”
解析为整数。逻辑上的结论是,您解析文件的方式是错误的,因为它不是为文件中的每个整数返回一个字符串,而是返回一个包含所有整数的字符串。的确如此。您的解析逐行读取文件,但该文件包含一行,其中有许多整数由逗号分隔。在不同注释上可能重复的,请将数组列表初始化为空,而不是
null
,例如
list lineas=new ArrayList()
lineas = bf.lines()
        .flatMap(s -> Arrays.stream(s.split(",")))
        .collect(Collectors.toList());
return lineas.stream()
        .map(Integer::parseInt)
        .collect(Collectors.toList());
public static List<Integer> leeFichero(String f) {
    Pattern p = Pattern.compile("\\s*,\\s*");
    try (BufferedReader bf = new BufferedReader(new FileReader(f))) {
        return bf.lines().flatMap(s -> Arrays.stream(p.split(s)))
                .map(Integer::valueOf).collect(Collectors.toList());
    } catch (IOException e) {
        System.out.println(e.toString());
    }
    return new ArrayList<>();
}