如果在Java 8中stream之前collection为null,如何返回false?

时间:2019-05-09 02:00:23

标签: java collections java-8 java-stream

我写了下面的代码来检查某些情况。

/**
 * Returns true if any of the dose detail is an x
 * @return boolean
 */
public <DD extends BD<DI>, DI extends BI> boolean Y(final Collection<DD> dds) {
    return dds.stream().anyMatch(dd -> dd.M().K());
}

但是此方法有一些风险dds,为空。我需要返回false也是dd也为null。如何使用Java 8将此方法修改为null安全?

4 个答案:

答案 0 :(得分:6)

或者您可以这样做。更多或类似的方式

return dds != null && dds.stream().anyMatch(dd -> dd.M().K());

答案 1 :(得分:2)

它可能很简单

public <DD extends BD<DI>, DI extends BI> boolean Y(final Collection<DD> dds) {
    return dds == null ? false : dds.stream().anyMatch(dd -> dd.M().K());
}

答案 2 :(得分:2)

或者,您也可以将其包装在Optional周围,如下所示:

public <DD extends BD<DI>, DI extends BI> boolean Y(final Collection<DD> dds) {
    return Optional.ofNullable(dds)
            .filter(d -> d.stream().anyMatch(dd -> dd.M().K()))
            .isPresent();
}

答案 3 :(得分:1)

我喜欢@the_tech_maddy的回答。从 org.apache.commons.collections.CollectionUtils;

检查集合是否为空或为空的一种首选方法
return CollectionUtils.isNotEmpty(dds) && dds.stream().anyMatch(dd -> dd.M().K());