我有一个关于将一个链条件重写为流式的问题。
我们有一个包含2个字段的实体:
class Test {
private boolean isActive = false;
private Status status;
//getters and setters
}
我们有条件:
private static boolean isOneAndActiveAndDeprecated(List<Test> test) {
return CollectionUtils.size(test) == 1
&& test.get(0).isActive()
&& Status.DEPRECATED == test.get(0).getStatus();
}
列表可以为null或非null。所以我们需要检查一下。 列表大小应为1或者可以为空,不超过1,根据此方法之前的业务逻辑是不可能的。
我不确定这是好的实施。从一方面来看,这个条件不是那么难以阅读,而是从另一方面看,我们有3个“AND”操作员,在我看来这里并不是很清楚。我想可以简化这种方法。
谢谢。
答案 0 :(得分:3)
我已使用java 8中的Optional类更新了代码。
private static boolean isOneAndActiveAndDeprecated(List<Test> test) {
return Optional
.ofNullable(test)
.filter(tests -> test.size() == 1)
.map(tests -> tests.get(0))
.filter(Test::isActive)
.filter(t -> t.getStatus() == Status.DEPRECATED)
.isPresent();
}
答案 1 :(得分:1)
如果您的Test
课程有足够的equals()
方法,您可以尝试
return test.equals(Collections.singletonList(new Test(true, Status.DEPRECATED));
不确定我是否喜欢它。抱歉,没有流或选项。