3 回答
TA贡献2051条经验 获得超10个赞
如果您只想过滤掉pairs地图中存在的布尔值,则可以应用过滤功能:
Stream.of(values).filter(value -> pairs.get(value) != null && pairs.get(value) instanceof Boolean)
或者如果你想真正返回true和false值,你可以使用 map:
return Stream.of(values).allMatch(value -> {
if (pairs.get(value) == null) {
return false;
}
if ((pairs.get(value) instanceof Boolean)) {
return true;
}
errors.add(value + " does not contain a valid boolean value");
return false;
});
TA贡献1828条经验 获得超6个赞
我认为你需要 Just :
return Arrays.stream(values) .allMatch(value -> pairs.get(value) instanceof Boolean);
笔记
我
error
在你的方法中看不到任何原因也正如@Andy Turner在评论中提到的那样
pairs.get(value) instanceof Boolean
暗示pairs.get(value) != null
你不需要使用pairs.get(value) != null
TA贡献1790条经验 获得超9个赞
您可以使用以下方法重现与原始代码完全相同的行为
public static boolean areBooleansValid(Map<String, Object> pairs,
List<String> errors, String... values) {
Optional<String> opt = Arrays.stream(values)
.filter(s -> !(pairs.get(s) instanceof Boolean))
.findFirst();
opt .filter(s -> pairs.get(s) != null)
.ifPresent(value -> errors.add(value+" does not contain a valid boolean value"));
return !opt.isPresent();
}
就像您的原始代码一样,它只搜索第一个不是 a Boolean(可能是null)的项目,但仅当值不是 时才添加错误null。
添加回答
举报