我们的对象具有“属性”,它们的当前状态表示为
除了当前状态之外,对象的“更新”也是通过这些映射组织的。
现在我必须防止当前为
使用流,这里可以工作:
上面的代码首先获取所有属性中为true的集合,然后分别收集所有将变为false的属性。如果这两个集合的交集为空,则一切正常,否则出现错误。
上述方法可行,但我觉得有些笨重,并且不喜欢当前启用的集合被误用来计算交集。
有没有更加通俗易懂、符合惯用方式的流处理方法呢?
Map<String, Object>
,其中键类似于属性名称。值可以具有不同的类型,我的当前任务仅涉及布尔属性。除了当前状态之外,对象的“更新”也是通过这些映射组织的。
现在我必须防止当前为
true
的属性被禁用(变为false
)。使用流,这里可以工作:
Set<String> currentlyEnabled = currentObjectPropertiesMap.
.entrySet()
.stream()
.filter(e -> Boolean.TRUE.equals(e.getValue()))
.map(Entry::getKey)
.collect(Collectors.toSet());
Set<String> goingDisabled = updatedObjectPropertiesMap
.entrySet()
.stream()
.filter(e -> Boolean.FALSE.equals(e.getValue()))
.map(Entry::getKey)
.collect(Collectors.toSet());
currentlyEnabled.retainAll(goingDisabled);
if (currentlyEnabled.isEmpty()) {
return;
} else {
throw new SomeExceptionThatKnowsAllBadProperties(currentlyEnabled);
}
上面的代码首先获取所有属性中为true的集合,然后分别收集所有将变为false的属性。如果这两个集合的交集为空,则一切正常,否则出现错误。
上述方法可行,但我觉得有些笨重,并且不喜欢当前启用的集合被误用来计算交集。
有没有更加通俗易懂、符合惯用方式的流处理方法呢?
currentObjectPropertiesMap.entrySet()
,在值为false
的条目上使用continue
,否则检查updatedObjectPropertiesMap.hasKey()
是否为true
,如果该键的值为false
则抛出异常? - SomethingSomething