从一个映射中获取所有非空值,并使用Java 8放入第二个映射中

问题描述 投票:-1回答:1

我想要一个简洁的解决方案,使用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

java-8 stream
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.