如何使用java流从包含多个不同mysql日期的列表对象中获取映射对象

如何使用java流从包含多个不同mysql日期的列表对象中获取映射对象,java,java-stream,Java,Java Stream,如何使用Java8流从包含多个不同MySQL日期的列表对象中获取一个map对象,该对象包含键作为字符串,值作为列表对象 例如: 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"); 您可以分析

如何使用Java8流从包含多个不同MySQL日期的列表对象中获取一个map对象,该对象包含键作为字符串,值作为列表对象

例如:

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

您可以分析到日期并按月分组:

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));
如果您需要
映射
,则可以将最后一行更改为

...collect(Collectors.groupingBy(date -> date.getMonth().toString(), 
        Collectors.mapping(LocalDate::toString, Collectors.toList())));
final Map Map=listObj
.stream()
.collect(Collectors.groupingBy(v->LocalDate.parse(v).getMonth().name());

for(String-date:listObj){java.sql.date.valueOf(date);String-keymount=Month.of(sqlDate.getMonth()+1.name();if(mapObj.containsKey(keymount)){mapObj.get(keymount).add(sqlDate);}else{List-List-List-List=new arrararaylist();List.add(sqlDate);mapObj.put(keymount,List);}}

到目前为止您尝试了什么?向我们展示您的工作示例中没有“多个不同的MySQL日期”。在一种特殊的、非常常见的日期格式中,只有
字符串
s。
{MAY=[2018-05-20], MARCH=[2018-03-29, 2018-03-10], APRIL=[2018-04-21, 2018-04-22]}
...collect(Collectors.groupingBy(date -> date.getMonth().toString(), 
        Collectors.mapping(LocalDate::toString, Collectors.toList())));
final Map<String, List<String>> map = listObj
   .stream()
   .collect(Collectors.groupingBy(v -> LocalDate.parse(v).getMonth().name()));