Guava中Predicate用法總結

Predicate最基本的用法就是對Collection進行過濾,guava中很多集合的filter方法都是用Predicate來實現過濾的。

Predicate接口提供了一個泛型方法apply,在使用時根據需求實現。

以下爲代碼示例說明其用法:

import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
public class PredicateTest {
	public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
        users.add(new User("wang",24));
        users.add(new User("chen",26));
        users.add(new User("sun",24));
        //保留age不爲26的User
        Predicate<User> predicate1 = new Predicate<User>() {
            public boolean apply(User user) {
                if(user.getAge() != 26){
                    return true;
                }
                return false;
            }
        };
        //保留userName 是 chen 的user
        Predicate<User> predicate2 = new Predicate<User>() {
            public boolean apply(User user) {
                return PredicateTest.equals(user.getUserName(),"chen");
            }
        };
        //保留age不爲 26 [且] userName 是 chen的User
        Predicate<User> predicate1_and_predicate2 = Predicates.and(predicate1, predicate2);
        //保留age不爲26 [或] userName 是 chen的User
        Predicate<User> predicate1_or_predicate2 = Predicates.or(predicate1, predicate2);
        //與predicate1條件相反:只保留age爲26的User
        Predicate<User> notpredicate1 = Predicates.not(predicate1);
        List<User> filteredUsers1 = Lists.newArrayList(Iterables.filter(users,predicate1));
        List<User> filteredUsers2 = Lists.newArrayList(Iterables.filter(users,predicate2));
        List<User> filteredUsers1and2 = Lists.newArrayList(Iterables.filter(users,predicate1_and_predicate2));
        List<User> filteredUsers1or2 = Lists.newArrayList(Iterables.filter(users,predicate1_or_predicate2));
        List<User> filteredUsersNot1 = Lists.newArrayList(Iterables.filter(users,notpredicate1));
        System.out.println("filteredUsers1: " + filteredUsers1.size());          //2->  wang sun
        System.out.println("filteredUsers2:  " + filteredUsers2.size());         //1-> chen
        System.out.println("filteredUsers1and2:  " + filteredUsers1and2.size()); //0->
        System.out.println("filteredUsers1or2:  " + filteredUsers1or2.size());   //3-> wang chang sun
        System.out.println("filteredUsersNot1:  " + filteredUsersNot1.size());   //1-> chen
	}
	public static boolean equals(Object a, Object b) {
	    return (a == b) || (a != null && a.equals(b));
	}
}
class User {
    private String userName;
    private int age;
    public User(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }
    public String getUserName() {
        return userName;
    }
    public int getAge() {
        return age;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

也很感謝提供案例的大噶,爲這個方法的使用加深了印象

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