当前位置: 首页 > 知识库问答 >
问题:

如何根据地图集合值的大小对地图进行排序?

董子平
2023-03-14
Map<String, List<String>> map = new HashMap<>();

map.put("USA", Arrays.asList("CA","IA","IL"));
map.put("India", Arrays.asList("MUM","CAL"));
map.put("Canada", Arrays.asList("TOR"));

共有1个答案

轩辕嘉平
2023-03-14

HashMap没有保证的迭代顺序,因此需要收集到LinkedHashMap,以便排序有意义。

import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.toMap;

Map<String, List<String>> sorted = map.entrySet().stream()
    .sorted(comparingInt(e -> e.getValue().size()))
    .collect(toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (a, b) -> { throw new AssertionError(); },
        LinkedHashMap::new
    )); 

抛出assertionerror是因为组合器函数只用于并行流,而我们没有使用并行流。

如果您发现comparingbyvalue,您还可以使用它:

import static java.util.Map.Entry.comparingByValue;

Map<String, List<String>> sorted = map.entrySet().stream()
    .sorted(comparingByValue(comparingInt(List::size)))
    // ... as above
 类似资料:
  • 问题内容: 我有一个这样的: 我想根据列表值的大小按升序对地图进行排序。我怎样才能做到这一点? 在这种情况下,我希望订购加拿大,印度,美国的钥匙。 问题答案: 没有可保证的迭代顺序,因此您需要收集到一个才能使排序有意义。 之所以引发,是因为合并器功能仅用于并行流],而我们并未使用。 如果您觉得可读性更好,也可以使用:

  • 问题内容: Stream >> sorted = index.entrySet().stream() .sorted(Map.Entry.comparingByValue()); 类型中的方法不适用于参数 我想根据作为的值的列表对a进行排序。如何使用Java 8中的Stream库实现此目的? 问题答案: 这可能对您有帮助。 我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。

  • 在value是集合的情况下,有没有办法按值对地图条目进行排序?我想按集合的大小对条目进行排序。到目前为止我的代码:

  • 假设我们有一个叫做活动的班级: 因此,每个活动对象都将有一个项目。。而且每个项目都有一个单元。两个不同的项目可以具有相同的单元: 一个单位也有一个名字: 所以目前我有一个树状图像这样: 一个例子可能是: 等 现在让我们假设projectOne与projectThree具有相同的单元(unitAAA),projectThree具有UNITZZ。。。 我想按项目元素的单位按字母顺序对地图进行排序: 我

  • 如何根据条目列表的值和键对地图进行排序 首先按Value desc排序,然后如果值冲突按Key Desc排序 给定地图中的示例: 预期订单:

  • 有了上面的地图值列表,我需要在一个伸展过程中根据date1和date2进行排序,从而得到下面的输出… 对于上述输入数据,我要求的O/P顺序是: