gpt4 book ai didi

filter - 检查java 8中的列表是否为空

转载 作者:行者123 更新时间:2023-12-04 00:01:40 24 4
gpt4 key购买 nike

我是 Java8 的新手。我已经实现了列表和过滤器。我在我的代码中做了一个空检查。对于如何检查同一代码段中的列表是否不为空,我将不胜感激。如果列表不为空,则代码应继续进行断言。

    list.stream().filter(listElement -> listElement != null).
forEach((listElement) -> Assert.assertEquals(
ValueType.CANDY,
listElement.getCandyType()));

最佳答案

你在问一个过时的问题。 Streams 处理源的所有元素,因此,如果没有元素,则不会执行任何操作。因此,您无需检查列表是否为空。

不过,您可以简化代码:

list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.forEach(candyType -> Assert.assertEquals(ValueType.CANDY, candyType));

或者
Assert.assertTrue(list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.allMatch(Predicate.isEqual(ValueType.CANDY));
allMatch遵循此检查所需的规则。如果没有元素,则没有矛盾的元素,因此全部匹配。请注意 listElement -> listElement.getCandyType()也可以替换为 ClassName::getCandyType 形式的方法引用;我没有在这里做,因为我不知道正确的类名。

两种变体之间没有性能差异。 allMatch遇到第一个不匹配的元素会立即返回, assertEquals将抛出第一个不匹配的元素。在第二种情况下,堆栈跟踪不会显示流 API 实现的工件。

当您为生产代码提供检查而不是单元测试并允许关闭这些检查时,第二个是首选,如 Java 语言 assert功能,例如
assert list.stream().filter(Objects::nonNull)
.map(listElement -> listElement.getCandyType())
.allMatch(Predicate.isEqual(ValueType.CANDY));

因为这种形式保证关闭断言时不会产生开销,而第一个变体具有 assert forEach 的声明action 仍然可能导致遍历所有元素并执行管道的中间步骤。

关于filter - 检查java 8中的列表是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com