zoukankan      html  css  js  c++  java
  • 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);

        }
    }

  • 相关阅读:
    1038 Recover the Smallest Number (30分) sort-cmp妙用(用于使字符串序列最小)
    1033 To Fill or Not to Fill (25分)贪心(???)
    1030 Travel Plan (30分) dij模板题
    1020 Tree Traversals (25分)(树的构造:后序+中序->层序)
    1022 Digital Library (30分) hash模拟
    1018 Public Bike Management (30分)(Dijkstra路径保存fa[]+DFS路径搜索)
    1017 Queueing at Bank (25分)模拟:关于事务排队处理
    1014 Waiting in Line (30分)队列模拟题
    1010 Radix (25分)暴力猜数or二分猜数
    HDU 3032 multi-sg 打表找规律
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/10056578.html
Copyright © 2011-2022 走看看