java - 用将元素映射到元素集合来替换多重映射

标签 java collections

我正在尝试将meterId映射到具有该Id的MeterBlinks列表。我主要对如何为 HashMap.put() 调用构建列表感到困惑。代码如下:

Map<String, List<MeterBlink>> IdToMetersMap = new HashMap<>();
for (MeterBlink meterBlink : createData()) {
    List<MeterBlink> meterBlinkList = new ArrayList<>();
    meterBlinkList.add(meterBlink);
    String meterId = meterBlink.getMeterId();
    idToMetersMap.put(meterId, meterBlinkList)
}

我认为问题是我每次迭代时都会创建一个新列表,但我不确定如何解决这个问题。

最佳答案

使用computeIfAbsent jre 8中添加的方法:

Map<String, List<MeterBlink>> idToMetersMap = new HashMap<>();
for (MeterBlink meterBlink : createData()) {
    String meterId = meterBlink.getMeterId();
    idToMetersMap.computeIfAbsent(meterId, k -> new ArrayList<>()).add(meterBlinks);
}

java 8 中的另一个选项:

Map<String, List<MeterBlink>> idToMetersMap = createData().stream()
                                     .collect(Collectors.groupingBy(MeterBlink::getMeterId));

关于java - 用将元素映射到元素集合来替换多重映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747409/

相关文章:

java - 服务器遇到内部错误,无法完成此请求

java - 我正在尝试将 ArrayList 对象存储在数据库中

.net - .net中的generic.list和generic.dictionary线程是否安全?

java - Guava Immutable* 类是否满足它们实现的标准集合接口(interface)?

java - 是否建议在字段中缓存 Collections.unmodifiableList() 结果?

java - 无需任何方法即可选择列表中的最小和最大数字

java - 通过注解的Bean继承

java - 为什么这里不能使用 throws Exception 呢?

java - IntelliJ 错误地划分 JUnit 4 输出

Java 8 函数接受 List<V> 并返回 HashMap<K, List<V>>