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 +
'}';
}
}