我正在尝试将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/