首页 > 解决方案 > 如何使用java流从包含多个不同mysql日期的列表对象中获取地图对象

问题描述

如何使用 java 8 流从包含多个不同 MySQL 日期的列表对象中获取包含 Key 作为字符串和 Value 作为 List 对象的映射对象。

例子:

List listObj = new ArrayList<>(); 
listObj.add("2018-04-21"); 
listObj.add("2018-05-20"); 
listObj.add("2018-04-22"); 
listObj.add("2018-03-29"); 
listObj.add("2018-03-10");

预期的 Map 对象应该是这样的:

如果我正在打印地图对象输出:

[March, "2018-03-29","2018-03-10"] [April, "2018-04-21","2018-04-22"] [May, "2018-05-20"]

标签: javajava-stream

解决方案


您可以按月解析日期和分组:

List<String> listObj = new ArrayList<>(); //use String type argument
// ... add elements

Map<Month, List<LocalDate>> map = listObj.stream()
        .map(LocalDate::parse)
        .collect(Collectors.groupingBy(LocalDate::getMonth));

打印map输出:

{MAY=[2018-05-20], MARCH=[2018-03-29, 2018-03-10], APRIL=[2018-04-21, 2018-04-22]}

如果您更需要 a Map<String, List<String>>,那么您可以将最后一行更改为

...collect(Collectors.groupingBy(date -> date.getMonth().toString(), 
        Collectors.mapping(LocalDate::toString, Collectors.toList())));

推荐阅读