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

Java8流:groupingBy和create Map

蔚学林
2023-03-14

我想得到以下数据结构:Map

给定的是一个包含字段als原语(位置、目标、距离)或作为键(位置)加映射(目标)的类。从每个独特的位置,一个人可以瞄准多个目的地(按距离)。

private static class LocationPair {
    String position, destination;
    int distance;
}

Map<String, Map<String, Integer>> locations = locationPairs.stream()
    .collect(Collectors.groupingBy(pair -> pair.position, Collectors.toMap(pair.destination, pair.distance)));
private static class LocationPair {
     String position;
     Map<String, Integer> target = Collections.singletonMap(destination, distance);
}

Map<String, Map<String, Integer>> locations = locationPairs.stream()
    .collect(Collectors.groupingBy(pair -> pair.position, Collectors.mapping(pair -> pair.target)));

关于第二个代码段:结果应该与第一个代码中的结果相同。唯一的区别是,LocationPair中提供的数据已被进一步处理,因此目的地和距离已被放入其目标地图中。

我知道这一定是可能的,但不知何故,我无法弄清楚如何完成它。上面的流代码片段将显示我的意思,尽管我知道它们不起作用。

非常感谢任何帮助

共有1个答案

伯俊弼
2023-03-14

代码看起来基本正确。小的调整使它工作了。

        public static Map<String, Map<String, Integer>> locations(List<LocationPair> locationPairs) {
            return locationPairs.stream()
                    .collect(
                            Collectors.groupingBy(LocationPair::getPosition, Collectors.toMap(LocationPair::getDestination, LocationPair::getDistance)));
        }

使用变量而不是方法引用,这变得-

locationPairs.stream()
                    .collect(
                            Collectors.groupingBy(tmp -> tmp.position, Collectors.toMap(tmp2 -> tmp2.destination, tmp2 -> tmp2.distance)));

希望这有帮助。如果我错过了什么,请告诉我

 类似资料:
  • 我有这个简单的Bean类: 在我的主类中,我在列表中添加了一些信息: 现在我想将图书列表转换为以下形式的地图: 因此,输出(上面的地图)如下所示: 因此,我需要按isbn作为关键字和作者作为值对条目进行分组。一个isbn可以有多个作者。 我尝试如下: 不能更改bean的格式。如果bean有字符串值而不是map,我可以这样做,但是要坚持使用map。 我已经写了传统的java 6/7方式来正确地做这件

  • 在我从在线材料中找到的以下jooq片段中,有一个从“jooq结束于此”到“流开始”的转换 这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中 或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分? 这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流

  • 谁能给我解释一下为什么下面的代码不起作用? 我试图了解Java8的新特性,并解决了BerlinClock卡塔问题。在此期间,我必须以的格式解析字符串--我想使用流,并编写了下面的代码。 但是运行时系统(我认为)抱怨无法执行显式类型转换。

  • 本文向大家介绍Java8 stream 中利用 groupingBy 进行多字段分组求和案例,包括了Java8 stream 中利用 groupingBy 进行多字段分组求和案例的使用技巧和注意事项,需要的朋友参考一下 Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map 对集合按照单个属性分组、分组计数、排序 集合按照多个属性分组 1.

  • 给java类一些东西 我有一张物品清单 我希望能够对它们进行排序,这样它们就可以按照每个父对象的虚数的累积和排序,然后再按照虚数排序。 所以我最终 我知道用parentKey和sum of noThings映射它是 我想,也许包装我的Something类并获得每个父项的总密钥可能会在某种程度上起作用。 但看起来工作量很大,不太优雅。 如有任何意见/想法,将不胜感激。