Сортировка списка внутри сложной карты - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужна помощь, я не смог найти способ решить эту задачу ..

Я создал эту карту из ArrayList следующим образом:

Map<RamiBean, Map<String, Map<String, List<AllertaBean>>>> complexMap = allerte.stream()
    .distinct()
    .collect(Collectors.groupingBy(
             ab -> ab.getRamoBean(), 
             Collectors.groupingBy(ab -> ab.getPuntoBean().getNomePunto(), 
             Collectors.groupingBy(AllertaBean::getDescAllerta))));

Моя проблема в том, что янужно сгруппировать второй уровень для ab.getPuntoBean().getNomePunto(), но я бы хотел, чтобы эта группа была упорядочена другим полем / методом: ab.getPuntoBean().getKm()

1 Ответ

0 голосов
/ 05 февраля 2019

попробуйте это

Map<RamiBean, Map<String, Map<String, List<AllertaBean>>>> complexMap = allerte.stream()
    .distinct()
    .collect(Collectors.groupingBy(
         ab -> ab.getRamoBean(), 
         Collectors.groupingBy(ab -> ab.getPuntoBean().getNomePunto(), 
         Collectors.toMap(
                 AllertaBean::getDescAllerta,
                 ab -> new ArrayList(Arrays.asList(ab)),
                 (abList1, abList2) -> {
                       abList1.addAll(abList2);
                       abList1.sort(Comparator.comparing(ab -> ab.getPuntoBean().getKm()))
                       return abList1;
                  }
         )
         )
    ));

или это

Map<RamiBean, Map<String, Map<String, List<AllertaBean>>>> complexMap = allerte.stream()
    .distinct()
    .collect(Collectors.groupingBy(
         ab -> ab.getRamoBean(), 
         Collectors.groupingBy(ab -> ab.getPuntoBean().getNomePunto(), 
         Collectors.groupingBy(AllertaBean::getDescAllerta,
              Collectors. collectingAndThen(Collectors.toList(),
                   abList -> abList.sort(Comparator.comparing(ab -> ab.getPuntoBean().getKm()))
  ))));
...