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