CollectionUtils.select用法


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

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.Transformer;

public class UserTest {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

        List<User> userList = new ArrayList<User>();

        User user0 = new User();
        user0.setPassword("1111");
        user0.setUsername("haha");
        userList.add(user0);

        User user1 = new User();
        user1.setPassword("1111");
        user1.setUsername("heihei");
        userList.add(user1);

        User user2 = new User();
        user2.setPassword("2222");
        user2.setUsername("lala");
        userList.add(user2);

        // 這是在演示:集合內取出對象,取出的對象的屬性是特定值
        // 這個方法的正向概念上當然是取出符合要求的對象集合,
        // 但反向概念上,也就是刪除集合內符合要求的對象,只要在evaluate方法的返回值上加個感嘆號即可。
        // .................................................
        // 如果不用這個方法來達到刪除效果,我們會怎么樣做呢?
        // 估計是使用userList.remove(Object o),使用這個方法呢,就要重寫User的equals方法,
        // 並且equals里面只定義password的比對,然后在此處new一
        // 個User並且設置進password為"1111",然后傳入此方法。
        // 這樣做也可以達到效果,但影響長遠,影響了整個User
        // 對象整個的使用,並且因為此處的依賴原因,equals方法將不能再做任何修改
        // 而在項目中,如果后來者不知道此處對equals的依賴而改了equals,那你就要悲劇。
        userList = (List<User>) CollectionUtils.select(userList,
                new Predicate() {
                    public boolean evaluate(Object arg0) {
                        User u = (User) arg0;
                        return "1111".equals(u.getPassword());
                    }
                });

        // ....現在,userList中指剩下user0,user1了,咱繼續

        // 這是在演示:集合內取出對象某屬性值的集合
        // 也是集合操作很實用的方法,要不還要自己循環集合去取某屬性值,然后add進事先new的list中,麻煩
        List<String> userNameList = (List<String>) CollectionUtils.collect(
                userList, new Transformer() {
                    public Object transform(Object arg0) {
                        User u = (User) arg0;
                        return u.getUsername();
                    }
                });

        // 好了,如果沒錯,那userNameList就是"haha"和"heihei"2個字符串了,瞧瞧效果吧
        System.out.println(userNameList);

    }
}


免責聲明!

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



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