本文主要介绍Java中,使用Stream filter()、collect(),、findAny() 和 orElse(),对List数据进行过滤和筛选的方法及示例代码。

1、使用 filter() 和 collect()过滤筛选List数据

package com.cjavapy.java8;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamJava8 {
    public static void main(String[] args) {
        List<String> lines = Arrays.asList("c","java", "python", "cjavapy");
        List<String> result = lines.stream()                //将list 转成 stream
                .filter(line -> !"cjavapy".equals(line))     // 过滤掉cjavapy
                .collect(Collectors.toList());              // 收集输出并将流转换为列表
        result.forEach(System.out::println);                //输出 :c, javapy,python
    }
}

2、使用 filter() findAny()和 orElse()过滤筛选List数据

1) 单个筛选条件

package com.cjavapy.java8;
import java.util.Arrays;
import java.util.List;
public class cjavapyJava8 {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person("cjavapy", 11),
                new Person("jack", 20),
                new Person("levi", 40)
        );
        Person result1 = persons.stream()                        // 转换成 steam
                .filter(x -> "jack".equals(x.getName()))        // 筛选出jack
                .findAny()                                      // 如果'findAny' 找到则返回数据
                .orElse(null);                                  //如果没找到, 则返回null
        System.out.println(result1);
    }
}

2) 多个筛选条件

package com.cjavapy.java8;
import java.util.Arrays;
import java.util.List;
public class cjavapyJava8 {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person("cjavapy", 30),
                new Person("jack", 20),
                new Person("jack", 30),
                new Person("levi", 40)
        );
        Person result1 = persons.stream()
                .filter((p) -> "jack".equals(p.getName()) && 20 == p.getAge())
                .findAny()
                .orElse(null);
        System.out.println("result 1 :" + result1);
        //或者
        Person result2 = persons.stream()
                .filter(p -> {
                    if ("jack".equals(p.getName()) && 20 == p.getAge()) {
                        return true;
                    }
                    return false;
                }).findAny()
                .orElse(null);
        System.out.println("result 2 :" + result2);
    }

}

3、使用filter() 和 map()过滤筛选List数据

package com.cjavapy.java8;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class cjavapyJava8 {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person("javapy", 18),
                new Person("cjavapy", 30),
                new Person("jack", 25),
                new Person("levi", 31)
        );
        String name = persons.stream()
                .filter(x -> "jack".equals(x.getName()))
                .map(Person::getName)                        //将 stream 转成 String
                .findAny()
                .orElse("");
        System.out.println("name : " + name);
        List<String> collect = persons.stream()
                .map(Person::getName)
                .collect(Collectors.toList());
        collect.forEach(System.out::println);
    }
}

相关文档:

Java 使用Stream()过滤(filter())筛选List T 列表数据并记录过滤的值日志方法代码

Java 使用Stream()将Map String, List String 数据求和(sum)方法代码

Java Stream使用多个过滤器(filter())或复杂条件方法用法及简单写法代码

推荐文档