栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否有一种方便的方法来创建谓词来测试字段是否等于给定值?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有一种方便的方法来创建谓词来测试字段是否等于给定值?

没有内置的工厂方法,您可以通过查看JFC中的所有用法

Predicate
并查找“ …中返回谓词的方法”
来轻松检查。除了
Predicate
自身内部的方法外,只有
Pattern.asPredicate()
可以返回
Predicate

在实现这种工厂方法之前,应该问自己是否真的值得。使您的lambda表达式

.filter(a -> Objects.equals(a.getField(),somevalue))
看起来复杂的原因是,
Objects.equals
当您可以预测至少一个参数是否为时,就不必使用它
null
。由于在这里
somevalue
是never
null
,因此可以简化表达式:

final Integer somevalue = 42;Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))    .filter(a -> somevalue.equals(a.getField()))    …

如果您仍想实现工厂方法并利用已有的方法创造性地赢得价格,则可以使用:

public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {    return f.andThen(Predicate.isEqual(value)::test)::apply;}

但是,对于生产代码,我宁愿推荐这样的实现:

public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {    return value==null? t -> f.apply(t)==null: t -> value.equals(f.apply(t));}

这将测试排除在外,该常数是否是

null
为了简化将在每个测试中执行的操作。因此它仍然不需要
Objects.equals
。请注意,
Predicate.isEqual
它的作用类似。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号