当前位置: 首页 > 面试题库 >

Java 如何否定方法引用谓词

高自怡
2023-03-14
问题内容

在Java8中,可以使用方法引用来过滤流,例如:

Stream<String> s = ...;
long emptyStrings = s.filter(String::isEmpty).count();

是否有方法创建一个方法引用,该方法引用是对现有方法引用的否定,例如:

long nonEmptyStrings = s.filter(not(String::isEmpty)).count();

我可以创建如下的not方法,但我想知道JDK是否提供了类似的功能。

static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }

问题答案:

Predicate.not( … )

java-11提供了一个新的方法谓词

因此可以否定方法引用:

Stream<String> s = ...;
long nonEmptyStrings = s.filter(Predicate.not(String::isEmpty)).count();


 类似资料:
  • 在Java 8中,您可以使用方法引用来过滤流,例如: 有没有一种方法可以创建一个方法引用,它是现有方法引用的否定,例如: 我可以像下面这样创建方法,但我想知道JDK是否提供了类似的东西。

  • 我正在尝试forEach中的方法引用 上面的工作很好,但我想让它更短的使用方法参考,但它给编译的问题,有什么办法使它发生?

  • 问题内容: 具体来说,我正在寻找与/ 等类似的清晰符号。 必须编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习惯用法。 问题答案: 谓词在Google收藏库中提供。

  • 我试图创建一个从最终用户抽象谓词使用的类。 我的应用程序使用了番石榴重试扩展,效果很好。 我可以很容易地用谓词调用它,它会轮询,直到谓词返回false。 现在,也许我误解了谓词,但我正在尝试创建一个类来抽象它们。 我想这样称呼它 所以我写了如下PollCondition类。 但是MyPoller。poll()调用无法编译-未声明结果。 知道吗?

  • 请查看以下代码: 这是可行的,但方法名是作为字符串传递的,因此即使myMethod不存在,也会编译。 另一方面,Java8引入了一个方法引用特性。它在编译时被检查。可以使用这个特性来获取方法信息吗? 完整示例: 换句话说,我希望有一个与以下C#代码等效的代码:

  • 我读过java中的PECS概念,但仍然不能理解为什么在谓词的情况下我们使用。java程序员是如何决定它是消费者而不是生产者的。 我的意思是为什么不允许出现编译错误的行: