Я хочу преобразовать Список Java POJO в Карту нестатическим методом с Java 8 Stream API.
Моей линейной диаграмме нужен список значений даты String для оси x и списокчисловые значения для оси y.Это типичный формат карты.Но моя база данных возвращает список POJO для меня.Я чувствую неприязнь к зацикливанию без помощи Java 8 Stream API.Я попробовал метод в этом [ask} ( Java 8 Список объектов для отображениязначений ).Тем не менее, я столкнулся с двумя проблемами. Во-первых, мой POJO MoreCustomDTO содержит целое число помимо String.Во-вторых, когда я пытаюсь использовать ссылку на метод, IDEA жалуется на то, что на статический метод нельзя ссылаться из статического контекста.
POJO:
@Data
MoreCustomDTO {
private String date;
private Integer money;
}
Метод запроса DAO:
public List<MoreCustomDTO > getMoreCustomCount(@Param("format") String format, @Param("startTime") String startTime, @Param("endTime") String endTime);
Решение до Java 8:
List<MoreCustomCountDTO> customList = customDao.getMoreCustomCount(SqlUtils.DATE_TYPE_FORMAT[Integer.valueOf(type)],startTime,endTime);
Map<String, List> map = new HashMap();
List<String> dateList = new ArrayList<>();
List<Integer> moneyList = new ArrayList<>();
for (MoreCustomCountDTO data : customList) {
dates.add(data.getDate());
dailyAmounts.add(data.getMoney());
}
map.put("date", dateList);
map.put("money", moneyList);
Сегмент кода ошибки:
Map<String,List> map =
customList.stream()
.flatMap(element -> {
Map<String,String> um = new HashMap<>();
um.put("date",element.getDate());
um.put("money",element.getMoney());
return um.entrySet().stream();
})
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));
Я получаю список из своей базы данных.И это массив объектов в формате JSON.
ответ:
{
"rows": [
{
"date": "2019-09-01",
"money": 0.00
},
{
"date": "2019-09-02",
"money": 0.00
}
]
}
Но я хочу формат карты один (ключ) ко многим (значениям).
ответ:
{
"map": {
"date": [
"2019-09-01",
"2019-09-02"
],
"money": [
0.00,
0.00
]
}
}