使用空检查获取流,并使用orElse()和orElseThrow()进行收集

时间:2019-02-26 07:35:12

标签: java collections null java-stream optional

Optional.ofNullable()仅检查null的值,而CollectionUtils.isNotEmpty()不返回流。有没有办法结合这两个功能。

类似这样的东西-

Collection.isNotEmpty(entries)
                .orElseThrow(() -> new Exception("exception"))
                .stream()

代替-

Optional.ofNullable(entries)
                .orElseThrow(() -> new Exception("exception"))
                .stream()

4 个答案:

答案 0 :(得分:2)

也许:

Optional.ofNullable((entries == null || entries.isEmpty()) ? null : entries)
        .orElseThrow(() -> new Exception("exception"))
        .stream()

答案 1 :(得分:2)

您可以简单地使用SELECT * FROM main m full outer join sub s ON m.MachPrice = s.MachPrices 来检查它是否为空

filter()

关于您要消除流本身中的Optional.ofNullable(entries) .filter(e -> !e.isEmpty()) .orElseThrow(() -> new Exception("exception")) .stream() 值的评论,可以使用以下方法:

null

答案 2 :(得分:2)

为进行比较,请考虑以下问题:

if (entries == null || entries.isEmpty()) {
    throw Exception("exception");
} else {
    return entries.stream();
}

(Holger在几则评论中提到了几乎相同的内容。)

我认为,在这种情况下使用Optional并不是对常规if / else语句的改进。

答案 3 :(得分:1)

您可以通过以下方式映射到流:

Optional.ofNullable(entries)
        .filter(a -> !a.isEmpty())
        .orElseThrow(() -> new Exception("exception"))
        // do whatever with the stream if available