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);

}
}

CollectionUtils.select用法的更多相关文章

  1. html select用法总结

    本文将介绍select 原生的常用方法,这些都是经过测试,兼容ie6到ie10,及chrome,火狐等,也就是说大部分浏览器都兼容.如果大家发现有不兼容的情况,可以跟我留言. 我们对基本的用法了如指掌 ...

  2. 网络通信 --> select()用法

    select()用法 头文件 #include <sys/time.h> #include <sys/types.h> #include <unistd.h> 定义 ...

  3. python+selenium七:下拉框、选项框、select用法

    # from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimpo ...

  4. golang学习之select用法

    早期的select函数是用来监控一系列的文件句柄,一旦其中一个文件句柄发生IO操作,该select调用就会被返回.golang在语言级别直接支持select,用于处理异步IO问题. select用法同 ...

  5. CollectionUtils.select 集合筛选

    import org.apache.commons.collections.CollectionUtils;import org.apache.commons.collections.Predicat ...

  6. 数据库Oracle的select用法(部分)

    Oracle的select用法(部分): 1.查询所有: select * from employees; 2.加上where子句:用选择限制行 select * from employees whe ...

  7. 每天玩转3分钟 MyBatis-Plus - 6. select 用法

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  8. select用法&原理详解(源码剖析)(转)

    今天遇到了在select()前后fd_set的变化问题,查了好久终于找到一个有用的帖子了,很赞,很详细!!原文链接如下: select用法&原理详解(源码剖析) 我的问题是: 如下图示:在se ...

  9. select用法

    每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selector"></select&g ...

随机推荐

  1. C++错题记录

    D. 通俗讲 , 前置++ : 先自增,再赋值    后置++: 先赋值,再自增 从反汇编中,可以看出: 前置++效率比后置++高 前置++: 自增后返回引用   后置++: 拷贝一份临时变量,再自增 ...

  2. 高并发 多线程批量ping工具 nbping简介和使用

    nbping 简介 nbping是为解决局域网大批量IP实例或主机探活,采用go协程并发处理,可以自定义并发的协程数量和输出结果.效率远高于现有的批量ping工具. nbping具备如下特性 - 支持 ...

  3. 了解下Scala隐式转换与柯理化

    之前有看过kafka源码,有很多implict声明的方法,当时看的一头雾水,今天趁着空闲,了解下scala 的隐式转换和柯理化相关语法知识. 隐式转换 需要类中的一个方法,但是这个类没有提供这样的一个 ...

  4. 线程池及Executor框架

    1.为什么要使用线程池? ​ 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过 ...

  5. springcolud 的学习(二).SpringCloud微服务框架

    为什么选择SpringCloud因为SpringCloud出现,对微服务技术提供了非常大的帮助,因为SpringCloud 提供了一套完整的微服务解决方案,不像其他框架只是解决了微服务中某个问题. 服 ...

  6. 使用poi调整字体格式、添加单元格注释、自动调整列宽

    1 创建新的工作铺 import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org ...

  7. 将整个 project 资源打包

    <build> <finalName>bootstrap</finalName> <sourceDirectory>${basedir}/src/mai ...

  8. 2019 波克城市ava面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.波克城市等公司offer,岗位是Java后端开发,最终选择去了波克城市. 面试了很多家公司,感觉大部分公司考察的点 ...

  9. 【转载】C#中Convert.ToDouble方法将字符串转换为double类型

    在C#编程过程中,可以使用Convert.ToDouble方法将字符串或者其他可转换为数字的对象变量转换为double类型,Convert.ToDouble方法有多个重载方法,最常使用的一个方法将字符 ...

  10. Integer装箱拆箱、参数传递

    拆箱装箱 举个例子 @Test public void testEquals() { int int1 = 12; int int2 = 12; Integer integer1 = new Inte ...