编程语言
首页 > 编程语言> > java-拆分流并从文本文件放入列表

java-拆分流并从文本文件放入列表

作者:互联网

如何将从文本文件中读取的所有元素放入ArrayList<监控数据使用流,其中monitoredData类具有以下3个私有变量:private Date startingTime,Date finishTime,String activityLabel; 文本文件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

等等….

前2个字符串由一个空格分隔,然后是2个制表符,再有一个空格是2个制表符.

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

解决方法:

您需要引入一个工厂来创建MonitoredData,例如,我正在使用一个函数从String []创建MonitoredData:

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

然后,您的代码在流上进行操作应如下所示,并且您无需使用Collectors#toCollection强制转换结果:

list = stream.map(line -> line.split("\t\t")).map(factory::apply)  
             .collect(Collectors.toCollection(ArrayList::new));

标签:java-8,java-stream,split,java,lambda
来源: https://codeday.me/bug/20191111/2019221.html