简述
Java8出了个Stream流、让本来对汇合类操作很蠢笨的写法,变得很晦涩!置信在Stream没有出世之前咱们对汇合做一些累加、过滤、等一些操作都是for for 一路的 forrr到底!代码量也是够大!写过php的同学都用过Collection
类的流式操作,真是顺畅!本文是带大家介绍下Steam里Filter的一些根本用法!
筹备代码
class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } // getter setter}
//搞几个数据public List<Person> personList() { List<Person> list = new ArrayList<>(); list.add(new Person("Lily", 12)); list.add(new Person("HanMei", 10)); list.add(new Person("Lucy", 15)); list.add(new Person("Lilei", 10)); return list;}
Filter
根本过滤
Java8的lambda
很不便的让咱们能够先申明一个变量指向一个函数,这种写法在很多编程语言里都反对,只是写法不一。在php里就叫匿名函数
@Testpublic void test_filter() { Predicate<Person> nameFilter = (person) -> person.getName().contains("Li"); List<Person> containsLi = personList().stream() .filter(nameFilter) .collect(Collectors.toList()); System.out.println(containsLi);}
下面的例子是过滤出personList
里带有Li
字符的人的汇合,用法很简略。
多条件过滤
@Testpublic void test_multi_filter() { Predicate<Person> nameFilter = (person) -> person.getName().contains("Li"); Predicate<Person> ageFilter = (person) -> person.getAge() >= 12; // 这里你能够用and 、isEqual List<Person> multiPerson = personList().stream() .filter(nameFilter.or(ageFilter)) .collect(Collectors.toList()); System.out.println(multiPerson);}
能够看到,采纳了多条件链式调用的办法,传递了多个判断逻辑,是不是很好用呢!
代码在GitHub