gpt4 book ai didi

用于 if 条件的 Java Lambda 表达式 - 此处不适用

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:55 24 4
gpt4 key购买 nike

考虑 if 条件需要评估数组或列表的情况。一个简单的例子:检查所有元素是否为真。但我正在寻找通用方法来做到这一点

通常我会这样做:

boolean allTrue = true;
for (Boolean bool : bools){
if (!bool) {
allTrue = false;
break;
}
}
if (allTrue){
// do Something
}

但现在我想将它隐藏到我的 if 条件中。我尝试为此使用 Lambda 表达式,但它不起作用:

if (() -> {
for (Boolean bool : bools)
if (!bool)
return false;
return true;
}){
// do something
}

如果这可行,我可以做一些更复杂的事情,比如

if (() -> {
int number = 0;
for (MyObject myobject : myobjects)
if (myObject.getNumber() != 0)
numbers++;
if (numbers > 2)
return false;
return true;
}{
//do something
}

是否有更好的方法来做到这一点只是一个语法错误?

更新我不是在谈论 boolean 数组,而是在寻找实现它的通用方法。

最佳答案

你可以这样写,例如 List<Boolean> :

if (!list.stream().allMatch(x -> x)) {
// not every member is true
}

或者:

if (list.stream().anyMatch(x -> !x)) {
// at least one member is false
}

如果您有 boolean 值的数组,则使用Arrays.stream()而是从中获取流。


更一般地,对于 Stream提供(通用)类型的元素 X , 你必须提供 Predicate<? super X>.{all,any}Match() (“完整”谓词、lambda 或方法引用——很多事情都可以)。这些方法的返回值是不言自明的——我认为。


现在,要计算 符合特定谓词的元素,您有 .count() ,您可以将其与 .filter() 结合使用-- 接受(无论是什么)Predicate作为论据。例如检查 List<String> 中是否有超过 2 个元素其长度大于 5 你会这样做:

if (list.stream().filter(s -> s.length() > 5).count() > 2L) {
// Yup...
}

关于用于 if 条件的 Java Lambda 表达式 - 此处不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23058864/

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