如何通过Optional或stream或lambda简化代码?

时间:2019-07-18 12:32:04

标签: java lambda java-stream optional

我想重构一些代码以简化它:

 public ObjectB doSomethingHere(ObjectA objectA, List<ObjectB> objectBList) {

 boolean emptyObject = objectA == null;
    boolean emptyList = CollectionUtils.isEmpty(objectBList);
    if (emptyObject || emptyList) {
      throw new SomeException("ERROR",
          emptyObject ? null : objectA.getId(),
          emptyList ? 0 : objectBList.size());
    }

    return objectBList
        .stream()        
        .filter(p -> doSomeStuff(p,objectA))
        .min(Comparator.comparingInt(ObjectB::getSort))
        .orElse(null);

         }

返回部分是在布尔表达式不为真(错误处理)的情况下逻辑应该做什么。

我猜这可以用“一枪”来解决,就像这样:

Optional.ofNullable(xxx ).orElseThrow(yyyy);

达到这个目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我不认为您使用Optional确实会增加任何内容,因为您实际上只是在检查该值是否为null。所以我建议:

if (objectA == null || objectBList.isEmpty())

您的流操作可以是:

return objectBList.stream()
    .filter(...)
    .min(...).orElse(null);