Java8,Stream之filter简单介绍
Posted Savey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8,Stream之filter简单介绍相关的知识,希望对你有一定的参考价值。
简述
Java8出了个Stream流、让原本对集合类操作很笨拙的写法,变得很流畅!相信在Stream没有出生之前我们对集合做一些累加、过滤、等一些操作都是for for 一路的 forrr到底!代码量也是够大!写过php的同学都用过Collection
类的流式操作,真是顺畅!本文是带大家介绍下Stream里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里就叫匿名函数
@Test
public 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
字符的人的集合,用法很简单。
多条件过滤
@Test
public 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
以上是关于Java8,Stream之filter简单介绍的主要内容,如果未能解决你的问题,请参考以下文章
java8 stream ,filter 等功能代替for循环
乐字节-Java8新特性-接口默认方法之Stream流(下)