有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

如何使用流将从文本文件读取的所有元素放入ArrayList < MonitoredData >,其中monitoredData类有以下3个私有变量:private Date startingTime, Date finishTime, String activityLabel

文本文件活动。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();
    }

共 (1) 个答案

  1. # 1 楼答案

    您需要引入一个工厂来创建MonitoredData,在示例中,我使用FunctionString[]创建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));