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. 递归实现全排列python

    python递归实现"abcd"字符串全排列 1.保持a不动,动bcd 2.保持b不动,动cd 3.保持c不动,动d def pailie(head="",st ...

  2. DRF框架(三)——media资源路径设置、多表设计复习及补充、序列化组件(ModelSerializer)操作多表(序列化与反序列化)、多表序列化与反序列化整合(重点)

    media资源路径设置  (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/me ...

  3. Haffman编码

    Huffman树又称为最优树,是一种带权路径最短的树. 一.带权路径 在一棵树中我们把一个节点到另一个节点之间的通路叫做路径,在路径中每经过一个节点路径的长度就加一.如果对一个节点附上权值,则该节点的 ...

  4. 为 WPF 程序添加 Windows 跳转列表的支持

    原文:为 WPF 程序添加 Windows 跳转列表的支持 Windows 跳转列表是自 Windows 7 时代就带来的功能,这一功能是跟随 Windows 7 的任务栏而发布的.当时应用程序要想用 ...

  5. 在虚拟机Linux安装Redis

    在虚拟机上安装 CentOS 7 安装成功后登录Root用户进入 opt目录,下载Redis. 下载Redis 下载命令: wget http://download.redis.io/releases ...

  6. NMS的实现代码详解

    NMS代码说明(来自Fast-RCNN) 个人觉得NMS包含很多框,其坐标为(x1,y1,x2,y2),每个框对应了一个score,我们将按照score得分降序,并将第一个最高的score的框(我们叫 ...

  7. python创建简单网站

    前言 本方法基于web2py框架,使用web2py的完整网站数据包创建简单网站. web2py 是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速.安全以及可移 ...

  8. 常用模块 - configparse模块

    一.简介 configparser模块在Python中是用来读取配置文件的,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节点(section),每个节可以有多个参数(键=值 ...

  9. jQuery设置样式css

    一.设置单个样式 $('.div').css('padding-top','8.6rem'); 二.设置多个样式 $('.div').css({'width': "240px",' ...

  10. iOS OpenCV资料收集

    OpenCV iOS Title: OpenCV iOS Hello Compatibility: > OpenCV 2.4.3 Author: Charu Hans You will lear ...