为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Stream 从 java Map 创建多个列表?

如何使用 Stream 从 java Map 创建多个列表?

芜湖不芜 2023-09-20 17:23:22
我是 Java 8 Stream API 的新手。我想知道是否可以根据地图中的键值创建多个列表?例如。如果我的地图是{"Developer", Developer; "Manager", Manager; "Lead", Lead; "Director", Director}我想根据关键值从地图创建开发人员列表、经理列表、领导列表和总监列表。如有任何帮助,我们将不胜感激。
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

使用Collectors.groupingBy,您可以生成从键到值列表的映射,前提是您可以根据值计算键。或者,您可以使用Collectors.toMap,前提是您可以从上游元素计算 Key 和 Value。您可能需要带有合并功能的 toMap 版本,因为这将允许您处理具有相同值的多个键(通过将它们放在一个列表中)。

编辑:如果您想要排序,则toMap和groupingBy
的重载允许您提供 mapFactory ( ) ,例如。Supplier<Map>TreeMap::new


查看完整回答
反对 回复 2023-09-20
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

请使用 Collectors.groupBy() 查找以下代码:


                List<Details> employeeList = Arrays.asList(new Details("Pratik", "Developer"), new Details("Rohit", "Manager"), new Details("Sonal", "Developer"), new Details("Sagar", "Lead"), new Details("Sanket", "Lead"));       


                Map<String, List<Details>> collect = employeeList.stream().collect(Collectors.groupingBy(x-> x.getDesignation()));

                System.out.println("Checking details "+ collect);


查看完整回答
反对 回复 2023-09-20
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

要反转映射,使其不同的值成为键,并将其键添加到相应值下的集合中,请groupingBy()在映射条目上使用。原始映射中的值必须正确实现equals()并hashCode()用作新哈希表中的键,这一点很重要。


static <K, V> Map<V, Set<K>> invert(Map<? extends K, ? extends V> original) {

  return original.entrySet().stream()

    .collect(Collectors.groupingBy(

      Map.Entry::getValue, 

      Collectors.mapping(Map.Entry::getKey, Collectors.toSet())

    ));

}

如果你想对组进行排序,你可以创建一个专门的“下游”收集器:


static <K, V> Map<V, SortedSet<K>> invert(

    Map<? extends K, ? extends V> original, 

    Comparator<? super K> order) {


  Collector<K, ?, SortedSet<K>> toSortedSet = 

     Collectors.toCollection(() -> new TreeSet<>(order));

  return original.entrySet().stream()

    .collect(Collectors.groupingBy(

      Map.Entry::getValue, 

      Collectors.mapping(Map.Entry::getKey, toSortedSet)

    ));

}


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信