简述
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 personList() {
List 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里就叫匿名函数
@Test
public void test_filter() {
Predicate nameFilter = (person) -> person.getName().contains("Li");
List containsLi = personList().stream()
.filter(nameFilter)
.collect(Collectors.toList());
System.out.println(containsLi);
}
上面的例子是过滤出personList
里带有Li
字符的人的集合,用法很简单。
多条件过滤
@Test
public void test_multi_filter() {
Predicate nameFilter = (person) -> person.getName().contains("Li");
Predicate ageFilter = (person) -> person.getAge() >= 12;
// 这里你可以用and 、isEqual
List multiPerson = personList().stream()
.filter(nameFilter.or(ageFilter))
.collect(Collectors.toList());
System.out.println(multiPerson);
}
可以看到,采用了多条件链式调用的方法,传递了多个判断逻辑,是不是很好用呢!
代码在GitHub