You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何未实现Predicate的方法引用可传入Stream.anyMatch?

问题解答

这是因为Java的方法引用可以自动适配函数式接口,不需要类显式实现对应接口,只要方法签名和函数式接口的抽象方法兼容即可。

关键细节拆解:

  • Stream.anyMatch要求的参数是Predicate<? super T>,而Predicate是一个函数式接口——仅包含一个抽象方法boolean test(T t)。
  • 你的ClassA.anyMethodName(Object o)方法:
    • 接收一个Object类型参数(流中元素是String,String是Object的子类,满足Predicate<? super String>的参数要求)
    • 返回值是boolean
    • 这个方法的签名和Predicate的抽象方法test(T t)完全匹配。

Java会自动将classA::anyMethodName这个实例方法引用,包装成一个Predicate<String>的实例,因此可以直接传入anyMatch方法,无需ClassA显式实现Predicate接口。

额外补充:你运行这段代码时,peek会依次打印所有元素(h、d、w、m、y),因为所有元素都不满足o instanceof Integer的条件,anyMatch会遍历完整个流后返回false。

内容的提问来源于stack exchange,提问作者user1169587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:33:10