filter()是一个中间操作,可以与 reduce()、collect()、map() 等一起使用。filter一般适用于list集合,主要作用就是模拟sql查询,从集合中查询想要的数据。
java官方文档语法如下。
filter(Predicate predicate)
它返回Stream的实例,该实例在处理Predicate后包含过滤后的数据。它被用作中间操作。filter()可用于许多不同的场景。如果我们想根据任何条件筛选list, array 或map,我们可以使用 lambda 表达式和 filter() 方法轻松完成。
接下来我们通过一个简单的例子说明一下
class Person {
private String name;//姓名
private String gender;//性别
...
//省略构造方法和getter、setter方法
...
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
使用Stream的filter进行过滤,只保留男性
Collection<Person> collection = new ArrayList();
(new Person("张三", "男"));
(new Person("李四", "女"));
(new Person("王五", "男"));
(new Person("赵六", "男"));
Stream<Person> personStream = ().filter(new Predicate<Person>() {
@Override
public boolean test(Person person) {
return "男".equals(());//只保留男性
}
});
collection = (());//将Stream转化为List
(());//查看结果
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
上面的demo没有使用lambda表达式,下面的demo使用lambda来进一步精简代码:
Stream<Person> personStream = ().filter(
person -> "男".equals(())//只保留男性
);
- 1
- 2
- 3
效果是一样的
filter()与 findAny() 和 orElse()一起使用
在Java 8以前, 你想通过name获取一个Person通常像这样 :
private static Person getPersonByName(List<Person> userList, String name) {
Person result = null;
for (Person temp : userList) {
if ((())) {
result = temp;
}
}
return result;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
而使用Java 8的新特性后,我们可以使用 ()来过滤 List,使用 .findAny().orElse (null) 来返回指定的对象.直接上代码
Person result1 = () // 转化为流
.filter(x -> "张三".equals(())) // 只过滤出"张三"
.findAny() // 如果找到了就返回
.orElse(null); // 如果找不到就返回null
(result1);
- 1
- 2
- 3
- 4
- 5
- 6
filter()与map()一起使用
String name = ()
.filter(x -> "张三".equals(()))
.map(Person::getName) //把流转化为String
.findAny()
.orElse(null);
- 1
- 2
- 3
- 4
- 5
map()函数解释: 如果有一个函数可以将一种类型的值转换成另外一种类型,map 操作就可以 使用该函数,将一个流中的值转换成一个新的流。 map 是 Stream 上最常用的操作之一
参考:
Java 8 Stream filter() Example
【Java 8 新特性】Java 8 Stream通过filter()方法筛选数据的示例_猫巳的博客-****博客
Java集合Stream类filter的使用_黄嘉成的博客-****博客
Java8 教程第三章之Stream filter(一) - 简书
【Java 8 新特性】Java 8 Stream通过filter()方法筛选数据的示例_猫巳的博客-****博客
最后
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。