如何使用Java流从包含多个不同mysql日期的列表对象中获取地图对象

时间:2018-08-23 07:14:42

标签: java java-stream

如何使用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"]

3 个答案:

答案 0 :(得分:0)

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

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]}

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

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

答案 1 :(得分:0)

final Map<String, List<String>> map = listObj
   .stream()
   .collect(Collectors.groupingBy(v -> LocalDate.parse(v).getMonth().name()));

答案 2 :(得分:0)

for(String date:listObj){java.sql.Date sqlDate = java.sql.Date.valueOf(date);字符串keyMonth = Month.of(sqlDate.getMonth()+1).name();如果(mapObj.containsKey(keyMonth)){mapObj.get(keyMonth).add(sqlDate); } else {List list = new ArrayList <>(); list.add(sqlDate); mapObj.put(keyMonth,list); }