当前位置: 首页 > 面试题库 >

使用Java 8 API将键-值对象对列表转换为简单的Multimap

澹台景辉
2023-03-14
问题内容

具有键值列表:

public class KeyValue {

    private Long key;

    private Long value;

    public KeyValue(long key, long value) {
        this.key = key;
        this.value = value;
    }

    //getters, setters, toStrings...
}

    List<KeyValue> values = new ArrayList<>();
    values.add(new KeyValue(15, 10));
    values.add(new KeyValue(15, 12));
    values.add(new KeyValue(25, 13));
    values.add(new KeyValue(25, 15));

如何使用Java 8 API将其转换为Multimap?

程序方式:

    Map<Long, List<Long>> keyValsMap = new HashMap<>();
    for (KeyValue dto : values) {
        if (keyValsMap.containsKey(dto.getKey())) {
            keyValsMap.get(dto.getKey()).add(dto.getValue());
        } else {
            List<Long> list = new ArrayList<>();
            list.add(dto.getValue());
            keyValsMap.put(dto.getKey(), list);
        }
    }

结果:

{25 = [13,15],15 = [10,12]}


问题答案:

这正是groupingBy收集器允许您执行的操作:

Map<Long, List<Long>> result = values.stream()
     .collect(Collectors.groupingBy(KeyValue::getKey,
         Collectors.mapping(KeyValue::getValue, Collectors.toList())));

然后,mapping收集器将KeyValue对象转换为它们各自的值。



 类似资料:
  • 我有以下格式的列表 如何根据其键找到值,例如我需要第3行的名称...以及如何根据行对其进行排序

  • 问题内容: 我正在编写一个Spark应用程序,并且想要将一组键-值对组合为一个“键-多值”对。我觉得我应该可以使用带有某种风味的功能来做到这一点: 发生这种情况时出现的错误是: ‘NoneType’对象没有属性’append’。 我的键是整数,值V1,…,Vn是元组。我的目标是用键和值列表(元组)创建一对。 问题答案: 映射和ReduceByKey 输入类型和输出类型必须相同,因此,如果要聚合列表

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有以下格式的列表 如何根据其键查找值,例如,我需要第3行的名称。。。以及如何根据行对其进行排序

  • 问题内容: 我想将对象数组转换为javascript中具有键值对的对象。 我如何将其转换为诸如 我希望大多数浏览器都支持它。 问题答案: 您可以使用和传播语法来创建具有给定对象数组的单个对象。

  • 问题内容: Json字符串: C#类: C#将json转换为电影的c#列表: 我的变量最终是一个计数为0的空列表。我是否缺少某些内容? 问题答案: 您的C#类映射与json结构不匹配。 解决方案:

  • 如何将单对象转换为简单列表对象? 我使用下面的代码: