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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM