java - Map.contains 与 Map.values().stream().filter.find

标签 java dictionary java-8 java-stream option-type

<分区>

自 Java 8 以来,与检查 Map 是否包含元素相关的最佳实践是什么?我想检查 Map 是否包含一个元素并基于它获取对象或创建一个新对象并将其放入 map 中。功能方式似乎过于冗长。

final private static Map<Integer, BowlingBall> pool = new HashMap<>();
int number = 8;

命令式:

BowlingBall ballImperative = null;

if (pool.containsKey(number)) {
    ballImperative = pool.get(number);
} else {
    ballImperative = new BowlingBall(number);
    pool.put(number, ballImperative);
}

功能方式:

BowlingBall ballFunctional = pool.values().stream()
    .filter(k -> k.getNumber() == number)
    .findAny()
    .orElseGet(() -> new BowlingBall(number));

pool.put(number, ballFunctional);

最佳答案

BowlingBall ballImperative =
    pool.computeIfAbsent(number, BowlingBall::new);

容易得多。

关于java - Map.contains 与 Map.values().stream().filter.find,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427863/

相关文章:

java - 在客户端进行身份验证,现在如何保护我的 Java Rest API?

Kotlin,是否可以访问这对 map ?

python - 字典条目都是一样的

python - 将多个词典写入 csv 文件?

maven - ANTLR4生成的代码未编译: “cannot override reset()”

java - 多部分/混合和应用程序/八位字节流

java - 常用的HTTP客户端和代理

Java 泛型 : On arraylist (unbounded wildcard type), add 和 addAll 方法的行为不同

java - 使用 Mockito 返回 Java 8 可选对象的模拟对象返回空可选

java - 原始值的映射替代