自己動手模擬 java 集合流式操作

import java.util.ArrayList;
import java.util.List;

public class MyArrayList<T> extends ArrayList<T> {

    private List<MyFilter> myFilters = new ArrayList<>();

    public MyArrayList<T> doFilter(MyFilter<T> myFilter){
        myFilters.add( myFilter );
        return this;
    }

    public MyArrayList<T> doCollect(){
        MyArrayList<T> tempList = new MyArrayList<>();
        for( T t:this ){
            boolean test=true;
            for(MyFilter myFilter:myFilters){
                if( !myFilter.pass( t ) ){
                    test=false;
                    break;
                }
            }
            if( test ){
                tempList.add( t );
            }
        }
        return tempList;
    }

    public interface MyFilter<T>{
        boolean pass( T t );
    }
}

 

public class Demo {

    public static void main(String[] args) {
        MyArrayList<Person> persons = new MyArrayList<>();
        persons.add( new Person( 1,"a",10 ) );
        persons.add( new Person( 2,"aa", 20) );
        persons.add( new Person( 3,"aaa",50 ) );
        persons.add( new Person( 4,"aaaa",80 ) );

        persons.add( new Person( 5,"b",10 ) );
        persons.add( new Person( 6,"bb", 20) );
        persons.add( new Person( 7,"bbb",50 ) );
        persons.add( new Person( 8,"bbbb",80 ) );

        persons.add( new Person( 9,"c",10 ) );
        persons.add( new Person( 10,"cc", 20) );
        persons.add( new Person( 11,"ccc",50 ) );
        persons.add( new Person( 12,"cccc",80 ) );

        MyArrayList<Person> tempPersons = persons.doFilter(new MyArrayList.MyFilter<Person>() {
            @Override
            public boolean pass(Person person) {
                return person.getName().startsWith("a");
            }
        }).doFilter(new MyArrayList.MyFilter<Person>() {
            @Override
            public boolean pass(Person person) {
                return person.getAge()>=40;
            }
        }).doCollect();

        System.out.println( tempPersons.size() );
        System.out.println( persons.size() );

 


import lombok.Data;

@Data
public class Person {

    private Integer id;
    private String name;
    private Integer age;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章