当前位置: 首页 > 后端技术 > Java

Java8,Stream的过滤器简介

时间:2023-04-01 19:27:28 Java

简介Java8有了一个Stream,让原本笨拙的对集合的操作写法变得非常流畅!相信在Stream诞生之前,我们一路forrr到最后,都是对集合做一些累加、过滤等操作!代码量也够大!写过PHP的同学用过Collection类的流式操作,真的很流畅!这篇文章就是介绍Filter在Stream中的一些基本用法!准备代码classPerson{privateStringname;私人年龄;publicPerson(Stringname,intage){this.name=name;这个。年龄=年龄;}@OverridepublicStringtoString(){return"Person{"+"name='"+name+'\''+",age="+age+'}';}//gettersetter}//获取一些数据publicListpersonList(){Listlist=newArrayList<>();list.add(newPerson("Lily",12));list.add(newPerson("寒梅",10));list.add(newPerson("Lucy",15));list.add(newPerson("李磊",10));returnlist;}Filter基本就是过滤Java8的lambda。我们声明一个变量指向一个函数是非常方便的。这种写法很多编程语言都支持,只是写法不同而已。在php中称为匿名函数@Testpublicvoidtest_filter(){PredicatenameFilter=(person)->person.getName().contains("Li");ListcontainsLi=personList().stream().filter(nameFilter).collect(Collectors.toList());System.out.println(containsLi);}上面的例子是过滤掉personList中的李字人物集合,用法很简单。多条件过滤@Testpublicvoidtest_multi_filter(){PredicatenameFilter=(person)->person.getName().contains("Li");PredicateageFilter=(person)->person.getAge()>=12;//这里可以使用and,isEqualListmultiPerson=personList().stream().filter(nameFilter.or(ageFilter)).collect(Collectors.toList());系统输出。println(multiPerson);}可见采用了多条件链式调用方式,传递了多个判断逻辑。不是很有用吗?代码在GitHub上