0

下面附加的屏幕截图是数据集的输出。这是我的作业,我被要求按照函数式编程风格进行所有编码。我尝试使用 Java Stream 和 map 来解析日期,但我不知道按月和周对它们进行分组,然后对数据求和。

数据集示例

下面是我的代码:

这是读取文件并将数据存储到arraylist的函数

public ArrayList<List<String>> csvParser(String CSVFileName) throws IOException {
        CSVParser csvParser = CSVParser.parse(Paths.get(CSVFileName), Charset.defaultCharset(), CSVFormat.DEFAULT);
        return csvParser
                .stream()
                .map(i->i.toList())
                .collect(Collectors.toCollection(ArrayList::new));
    }

这是检索数据集的列并解析日期的函数

public List<String> parseRetrievedDateList(List<String> dateToBeParsedList){
        return dateToBeParsedList.stream()
                .map(l-> {
                    return LocalDate.parse(l,DateTimeFormatter.ofPattern("M/d/yy")).format(DateTimeFormatter.ofPattern("yyyy/M/d"));
                })
                .collect(Collectors.toList());
    }
4

1 回答 1

0

如果我理解正确,一种选择是使用.collect(Collectors.groupingBy(...) Java Doc
例如,在您的情况下(猜测代码的其余部分),您可以执行以下操作:

parser
   .stream() // stream of csv rows
   .collect(Collectors.groupingBy(CsvRow::getMonth);

这将针对该月的行列表返回月份地图(无论是哪种类型)。
希望能给你一些指导。

于 2021-10-27T14:41:19.123 回答