【问题标题】:Sorting a List inside a complex map对复杂地图中的列表进行排序
【发布时间】:2019-06-25 23:22:32
【问题描述】:

我需要帮助,我找不到解决此任务的方法..

我通过以下方式从 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()

【问题讨论】:

  • 源列表allerte是什么?
  • 是一个数组列表
  • 提醒 ??提供有关此列表的更多信息。
  • 这是一个非常简单的豆子(英文天气警报)

标签: java dictionary arraylist java-8 java-stream


【解决方案1】:

试试这个

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

【讨论】:

  • Collectors.toList() 不保证返回可变列表。因此,如果您想事后对结果进行排序,则必须使用Collectors.toCollection(ArrayList::new) 以确保安全。
猜你喜欢
  • 2017-08-05
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2022-01-06
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多