Stream filter过滤有效数据

时间:2025-03-31 07:13:37

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解码把网址获取下来。