2 回答
TA贡献1943条经验 获得超7个赞
如果您的条件只是基于.equals()一个键和值,就像您在问题中显示的那样,您可以只使用map.get()一个简单的if语句:
Response result = responses.get("foo");
if (result == null || result.equals(bar))
result = responses.get("some other key");
所以没有必要使用任何其他东西。
或者正如 Holger 所建议的那样,您也可以使用map.getOrDefault():
Response result = responses.getOrDefault("foo", bar);
if(result.equals(bar))
result = responses.get("some other key");
TA贡献1853条经验 获得超9个赞
这可能是您需要使用的Optional:
Response response = Optional
.ofNullable(responses.get("foo")) // find the "foo" Response
.filter(value -> !"bar".equals(value)) // except if is null or "bar"
.orElse(responses.get("other")); // then find the "other" response (then null)
几点见解:
有代码:
if (key.equals("foo") && !value.equals("bar")) { res1 = value; } else if (key.equals("some other key")) { res2 = value; }尽管每个键可能只出现一次,但在循环内部,每次迭代都不必要地检查这两个条件。考虑在和被设置的
break情况下的用法。res1res2这java流在这里不是胜利。请注意,如果密钥不存在,
entry.getKey().equals("foo")则应缩短为map.get("foo")which 返回。null这就是为什么我将此行为与Optional.
添加回答
举报
