我想要一个简洁的解决方案,使用Java 8将所有非空值从一个映射复制到另一个映射。我试图通过使用Java 8流API重写传统代码,该API过滤空值并最终放入另一个映射。
Java 7:
int index = 0;
for (int i = 0; i < map.size(); i++) {
if (map.containsKey(i + "|")) {
Object value = map.get(i + "|");
if (null != value) {
headerFieldsMeta.put(index++ + "|", value);
}
}
}
Java 8:
AtomicInteger atomicIndex = new AtomicInteger();
map.values()
.stream()
.filter(Objects::nonNull)
.forEach(value -> headerFieldsMeta.put(atomicIndex.getAndIncrement() + "|", value));
我希望可以有类似putAllIfAbsent
的方法来实现这一目标。有没有更简洁的方法来实现这一目标? headerFieldsMeta.putAll(map.values());
需要类型转换,并转换为ClassCastException
。