stream().filter匹配过滤总结

文章目录

  • 前言
  • 一、简单匹配过滤
  • 二、对象匹配过滤
  • 三、自定义匹配过滤


前言

Java集合Stream 出自 Java8。
可谓是加量不加价,丰富了使用场景,还精简了代码。虽然牺牲了一点可读性,但总体来说是很好用的。以下总结其中 filter 的一些用法,整理相关的例子。


以下是几种场景

一、简单匹配过滤

简单对象

public class TestFilter {
    public static void main(String[] args) {

        List<String> list = Arrays.asList("AAB","BBB","ACC");

        System.out.println("过滤相等-------------------------------------------");
        List<String> result1 = list.stream().filter(v -> v.equals("AAB")).collect(Collectors.toList());
        result1.forEach(v-> System.out.println(v));

        System.out.println("过滤 模糊相等(包含)-------------------------------------------");
        List<String> result2 = list.stream().filter(v -> v.contains("B")).collect(Collectors.toList());
        result2.forEach(v-> System.out.println(v));

        System.out.println("多条件 过滤 与:&&; 或||-------------------------------------------");
        List<String> result3 = list.stream().filter(v -> v.contains("A") && v.contains("C")).collect(Collectors.toList());
        result3.forEach(v-> System.out.println(v));
    }
}

运行结果
stream().filter匹配过滤总结_第1张图片
可见,filter支持单条件,多条件组合匹配过滤


二、对象匹配过滤

假设对象

public class User {

    /** 名称 */
    private String name;

    /** 年龄 */
    private Integer age;
}

例子

public class TestFilter1 {
    public static void main(String[] args) {

        List<User> userList = new ArrayList<>();
        userList.add(new User("小明", 18));
        userList.add(new User("王姐", 21));

        System.out.println("过滤相等-------------------------------------------");
        List<User> result1 = userList.stream().filter(v -> v.getName().equals("小明")).collect(Collectors.toList());
        result1.forEach(v-> System.out.println(v));
    }
}

运行结果
在这里插入图片描述


三、自定义匹配过滤

看看filter接口的源码

public interface Stream<T> extends BaseStream<T, Stream<T>> {

    /**
     * Returns a stream consisting of the elements of this stream that match
     * the given predicate.
     *
     * 

This is an intermediate * operation. * * @param predicate a non-interfering, * stateless * predicate to apply to each element to determine if it * should be included * @return the new stream */ Stream<T> filter(Predicate<? super T> predicate);

可以看到,filter接收的参数是Predicate,这是一个布尔接口,用于各种匹配,所以自定义filter实际上我们是你把Predicate的用法丰富起来
比如:

public class TestFilter1 {
    public static void main(String[] args) {

        List<User> userList = new ArrayList<>();
        userList.add(new User("小明", 18));
        userList.add(new User("王姐", 21));

        System.out.println("过滤相等-------------------------------------------");
        List<User> result2 = userList.stream().filter(new Predicate<User>() {
            @Override
            public boolean test(User user) {
                if (user.getAge() > 18) {
                    return true;
                }else{
                    return false;
                }
            }
        }).collect(Collectors.toList());
        result2.forEach(v-> System.out.println(v));
    }
}

运行结果
stream().filter匹配过滤总结_第2张图片

你可能感兴趣的:(Java开发,stream的filter,过滤)