Java 从文本文件中拆分流并放入列表
如何使用流将从文本文件读取的所有元素放入Java 从文本文件中拆分流并放入列表,java,lambda,split,java-8,java-stream,Java,Lambda,Split,Java 8,Java Stream,如何使用流将从文本文件读取的所有元素放入数组列表,其中monitoredata类有以下3个私有变量:私有日期开始时间、日期完成时间、字符串活动标签 文本文件Activities.txt如下所示: 2011-11-28 02:27:59 2011-11-28 10:18:11 Sleeping 2011-11-28 10:21:24 2011-11-28 10:23:36 Toileting 2011-11-28 10:25:44 20
数组列表
,其中monitoredata类有以下3个私有变量:私有日期开始时间、日期完成时间、字符串活动标签
文本文件Activities.txt如下所示:
2011-11-28 02:27:59 2011-11-28 10:18:11 Sleeping
2011-11-28 10:21:24 2011-11-28 10:23:36 Toileting
2011-11-28 10:25:44 2011-11-28 10:33:00 Showering
2011-11-28 10:34:23 2011-11-28 10:43:00 Breakfast
等等
前两个字符串由一个空格分隔,然后是两个制表符、一个空格和两个制表符
String fileName = "D:/Tema 5/Activities.txt";
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
list = (ArrayList<String>) stream
.map(w -> w.split("\t\t")).flatMap(Arrays::stream)
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
String fileName=“D:/Tema 5/Activities.txt”;
try(Stream=Files.line(path.get(fileName))){
列表=(ArrayList)流
.map(w->w.split(“\t\t”)).flatMap(数组::流)
.collect(Collectors.toList());
}捕获(IOE异常){
e、 printStackTrace();
}
您需要引入一个工厂来创建监控数据
,在示例中,我使用函数
从字符串[]创建监控数据
:
Function<String[],MonitoredData> factory = data->{
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
return new MonitoredData(format.parse(data[0]),format.parse(data[1]),data[2]);
// ^--startingTime ^--finishingTime ^--label
}catch(ParseException ex){
throw new IllegalArgumentException(ex);
}
};
w.split()
生成一个包含3个字符串的数组。现在您需要将该数组映射到监控数据。要么给MonitoredData
一个接受数组的构造函数,要么让一个lambda调用该构造函数,或者不要将collector.toList()的结果强制转换为ArrayList
。声明的类型是List
而不是ArrayList
,这是有原因的。无法保证结果将是一个ArrayList
。感谢您的帮助@Arkadiy!是的,你说得对。我将使用列表代替@霍尔格
list = stream.map(line -> line.split("\t\t")).map(factory::apply)
.collect(Collectors.toCollection(ArrayList::new));