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

Lambda将List转换为共享值映射到唯一值列表

钱照
2023-03-14

我有一个包含两个重要属性的Foo列表,BarBaz-Baz。实例可以共享Bar值,但具有唯一的Bazs。

我想把这个List转换成一个Map,这样共享一个Bar的所有实例的唯一的Baz都被放在映射到那个共享的Bar的Set中。

Map<Bar, Set<Baz>> m = new HashMap<>();
for (Foo foo : fooRepository.findAll()) {
    if (m.containsKey(foo.bar)) {
        m.get(foo.bar).add(foo.baz);
    } else {
        Set<Baz> set = new HashSet<>();
        set.add(foo.baz);
        m.put(foo.bar, set);
    }
}

我自己的功能印章还没有被证明能胜任这项任务。我试图同时减少收集List,但是当试图将不同的参数实现为lambdas时,被类型问题绊倒了。

尝试使用Collect

m = fooRepository.findAll().stream().collect(new HashMap<Bar, Set<Baz>>(), (m, foo)->m.merge(Foo::getBaz, s->s.add(foo.getBar()));

不完整,编译器无法确定m或foo和Foo::getBaz的类型。

Reduce不起作用,因为它不允许累加器与元素的值不同。

共有2个答案

欧阳博文
2023-03-14

如果您想要一个Multimap而不是Map,您可以使用Eclipse集合中的Collectors2.toSetMultimap

SetMultimap<Bar, Baz> multimap = fooRepository.findAll()
    .stream()
    .collect(Collectors2.toSetMultimap(Foo::getBar, Foo::getBaz));

注意:我是Eclipse集合的提交者。

全卜霸
2023-03-14
Map<Bar, Set<Baz>> m = fooRepository.findAll()
        .stream()
        .collect(Collectors.groupingBy(Foo::getBar,
                Collectors.mapping(Foo::getBaz, Collectors.toSet())));
 类似资料:
  • 本文向大家介绍Java 将Map映射转换为 List,包括了Java 将Map映射转换为 List的使用技巧和注意事项,需要的朋友参考一下 首先,让我们创建一个Java Map并初始化- 现在,将Map转换为List- 示例 以下是在Java中将Maps转换为List的程序- 输出结果

  • 我有一个由世界各地的城市组成的lat/lon值的坐标列表。我已经拼凑了一张美国的SVG地图,我想把世界上的主要城市作为别针显示在SVG地图的顶部。到目前为止,我已经弄清楚了,我所显示的地图投影是美国的墨卡托投影,那么下一步是,我如何获得每个城市地图的x/y坐标?一旦我从lat/lon得到墨卡托投影,那么如何将它转换为x/y值,然后根据地图的大小转换为相对x/y值呢?

  • 问题内容: 我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。 例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,则可以这样使用: 在此示例中,我希望输出为,

  • 我是Mapstruct的新手。我试图将列表转换为地图,我在网上搜索了很多,我有一些解决方案,比如它还没有在mapstruct中实现。如果有人能提供一些替代解决方案,我将很高兴。所有我希望转换映射如下: 现在是否可以使用MapStruct来实现?

  • 我试图使用lambda中的函数创建一个映射。现在我面临的问题是我无法将列表转换为特定情况下的映射 我需要在这里使用方法引用吗? 下面是方法

  • 我刚刚开始看Java8,为了尝试lambdas,我想我应该尝试重写我最近写的一个非常简单的东西。我需要将一个字符串到列的映射转换为另一个字符串到列的映射,其中新映射中的列是第一个映射中列的防御副本。列具有复制构造函数。到目前为止我得到的最接近的数据是: 但我相信一定有更好的方法来做这件事,我会很感激一些建议。