当前位置: 首页 > news >正文

网站做防劫持/效果最好的推广软件

网站做防劫持,效果最好的推广软件,免费俄语网站制作,代做原创毕业设计网站上一篇学习了下Function接口的使用,本篇我们学习下另一个实用的函数式接口Predicate。Predicate的源码跟Function的很像,我们可以对比这两个来分析下。直接上Predicate的源码:public interface Predicate {/*** Evaluates this predicate on …

上一篇学习了下Function接口的使用,本篇我们学习下另一个实用的函数式接口Predicate。

Predicate的源码跟Function的很像,我们可以对比这两个来分析下。直接上Predicate的源码:

public interface Predicate {

/**

* Evaluates this predicate on the given argument.

*/

boolean test(T t);

/**

* Returns a composed predicate that represents a short-circuiting logical

* AND of this predicate and another. When evaluating the composed

* predicate, if this predicate is {@code false}, then the {@code other}

* predicate is not evaluated.

*/

default Predicate and(Predicate super T> other) {

Objects.requireNonNull(other);

return (t) -> test(t) && other.test(t);

}

/**

* Returns a predicate that represents the logical negation of this

* predicate.

*/

default Predicate negate() {

return (t) -> !test(t);

}

/**

* Returns a composed predicate that represents a short-circuiting logical

* OR of this predicate and another. When evaluating the composed

* predicate, if this predicate is {@code true}, then the {@code other}

* predicate is not evaluated.

*/

default Predicate or(Predicate super T> other) {

Objects.requireNonNull(other);

return (t) -> test(t) || other.test(t);

}

/**

* Returns a predicate that tests if two arguments are equal according

* to {@link Objects#equals(Object, Object)}.

*/

static Predicate isEqual(Object targetRef) {

return (null == targetRef)

? Objects::isNull

: object -> targetRef.equals(object);

}

}

Predicate是个断言式接口其参数是,也就是给一个参数T,返回boolean类型的结果。跟Function一样,Predicate的具体实现也是根据传入的lambda表达式来决定的。

boolean test(T t);

接下来我们看看Predicate默认实现的三个重要方法and,or和negate

default Predicate and(Predicate super T> other) {

Objects.requireNonNull(other);

return (t) -> test(t) && other.test(t);

}

default Predicate negate() {

return (t) -> !test(t);

}

default Predicate or(Predicate super T> other) {

Objects.requireNonNull(other);

return (t) -> test(t) || other.test(t);

}

这三个方法对应了java的三个连接符号&&、||和!,基本的使用十分简单,我们给一个例子看看:

int[] numbers= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

List list=new ArrayList<>();

for(int i:numbers) {

list.add(i);

}

Predicate p1=i->i>5;

Predicate p2=i->i<20;

Predicate p3=i->i%2==0;

List test=list.stream().filter(p1.and(p2).and(p3)).collect(Collectors.toList());

System.out.println(test.toString());

/** print:[6, 8, 10, 12, 14]*/

我们定义了三个断言p1,p2,p3。现在有一个从1~15的list,我们需要过滤这个list。上述的filter是过滤出所有大于5小于20,并且是偶数的列表。

假如突然我们的需求变了,我们现在需要过滤出奇数。那么我不可能直接去改Predicate,因为实际项目中这个条件可能在别的地方也要使用。那么此时我只需要更改filter中Predicate的条件。

List test=list.stream().filter(p1.and(p2).and(p3.negate())).collect(Collectors.toList());

/** print:[7, 9, 11, 13, 15]*/

我们直接对p3这个条件取反就可以实现了。是不是很简单?

isEqual这个方法的返回类型也是Predicate,所以我们也可以把它作为函数式接口进行使用。我们可以当做==操作符来使用。

List test=list.stream()

.filter(p1.and(p2).and(p3.negate()).and(Predicate.isEqual(7)))

.collect(Collectors.toList());

/** print:[7] */

http://www.jmfq.cn/news/5192497.html

相关文章:

  • 公司在线网站制作系统/网站名称查询
  • 昆明网站制作专业/广州seo网站推广平台
  • 泰安网站设计/广州网站优化方案
  • 湖北建设厅官网/北京seo关键词排名
  • 珠海网站建设官网/小时seo加盟
  • 网站设计的介绍模板/网站建设定制
  • 南昌易动力网站建设公司/电脑优化大师哪个好
  • 网站建设属于什么服务/怎么免费给自己建网站
  • 房产网站哪个比较真实/营销策略分析包括哪些内容
  • b2b建设网站公司/新seo排名点击软件
  • 做的网站需要什么技术/九幺seo优化神器
  • 梵克雅宝中文官网/武汉seo公司排名
  • 网站开发做原型吗/浙江seo公司
  • 网站设计要素/广州网站建设方案维护
  • 外销网站建立/南宁百度seo优化
  • 国外设计有名网站/营销型企业网站
  • 找公司做网站建设靠谱吗/网站建设推广公司
  • 自己怎么做机构网站/广告信息发布平台
  • wordpress 信息网站/自己的网站
  • 电商网站设计公司力推亿企邦/网站推广优化怎样
  • 网站用什么格式的图片格式/百度风云榜小说排行榜
  • 韶关营销网站开发/网络推广竞价是什么
  • 域名过期做的网站怎么办/培训机构加盟店排行榜
  • 如何做网站竞价排名/网络平台有哪些?
  • 动漫做a视频网站有哪些/郑州seo优化外包顾问
  • 网络营销网站类型/秦皇岛seo招聘
  • 庆阳官网贴吧/优化疫情政策
  • 网站联盟是什么/郑州seo顾问阿亮
  • 最牛的科技网站建设/营销型网站建设推广
  • 西宁市建设局官方网站/优化搜狗排名