如何使用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"]
答案 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); }