gpt4 book ai didi

java - 引用具有指定参数的方法(用于 lambda)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:26:11 26 4
gpt4 key购买 nike

我有一种方法可以验证 List 中没有负数:

private void validateNoNegatives(List<String> numbers) {
List<String> negatives = numbers.stream().filter(x->x.startsWith("-")).collect(Collectors.toList());
if (!negatives.isEmpty()) {
throw new RuntimeException("negative values found " + negatives);
}
}

是否可以使用方法引用来代替 x->x.startsWith("-")?我考虑过 String::startsWith("-") 但没有用。

最佳答案

不,您不能使用方法引用,因为您需要提供参数,并且因为 startsWith方法不接受您尝试断言的值。您可以编写自己的方法,如:

private static boolean startsWithDash(String text) {
return text.startsWith("-");
}

...然后使用:

.filter(MyType::startsWithDash)

或者作为一个非静态方法,你可以:

public class StartsWithPredicate {
private final String prefix;

public StartsWithPredicate(String prefix) {
this.prefix = prefix;
}

public boolean matches(String text) {
return text.startsWith(text);
}
}

然后使用:

// Possibly as a static final field...
StartsWithPredicate predicate = new StartsWithPredicate("-");
// Then...
List<String> negatives = numbers.stream().filter(predicate::matches)...

但是你也可以制作StartsWithPredicate实现 Predicate<String>并在 :) 中传递谓词本身

关于java - 引用具有指定参数的方法(用于 lambda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24887196/

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