apache工具类之CollectionUtils(待续更新)

1. CollectionUtils 并 交 补

    @Test
    public void test3() {
        List<Integer> h = new ArrayList<Integer>();
        h.add(1);
        h.add(2);
        h.add(3);
        h.add(6);
        ;
        List<Integer> i = new ArrayList<Integer>();
        i.add(3);
        i.add(3);
        i.add(4);
        i.add(5);
        // 并集
        System.out.println(CollectionUtils.union(i, h)); // [1, 2, 3, 3, 4, 5]
        // 交集
        System.out.println(CollectionUtils.intersection(i, h)); // [3]
        // 交集的补集
        System.out.println(CollectionUtils.disjunction(i, h)); // [1, 2, 3, 4, 5, 6]
        // h减i的差
        System.out.println(CollectionUtils.subtract(h, i)); // [1, 2, 6]
        System.out.println(CollectionUtils.subtract(i, h)); // [3, 4, 5]

        // 两个集合间的操作
        List<Integer> e = new ArrayList<Integer>();
        e.add(2);
        e.add(1);
        List<Integer> f = new ArrayList<Integer>();
        f.add(1);
        f.add(2);
        List<Integer> g = new ArrayList<Integer>();
        g.add(12);
        // 比较两集合值
        System.out.println(CollectionUtils.isEqualCollection(e, f)); // true
        System.out.println(CollectionUtils.isEqualCollection(f, g)); // false

    }

2. CollectionUtils.collect

案例:从一个对象的集合中,获取某一属性的集合。如,从人员信息集合中获取人员姓名的集合

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;


public class CollectionTest {

    @Test
    public void test1(){
        List<Student> stuList = new ArrayList<Student>();
        stuList.add(new Student("wang","18"));
        stuList.add(new Student("li","19"));
        stuList.add(new Student("li","20"));
        @SuppressWarnings("unchecked")
        List<String> nameList = (List<String>) CollectionUtils.collect(
                stuList, new Transformer() {
                    public Object transform(Object arg0) {
                        Student u = (Student) arg0;
                        return u.getName();
                    }
                });
        Set<String> nameSet = new HashSet<String>(nameList);
        System.out.println(nameSet);                        //[wang, li]
        System.out.println(StringUtils.join(nameSet.iterator(),","));   //wang,li
    }
}

class Student{
    String name;
    String age;

    public Student(){}

    public Student(String name,String age){
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }

}

3. CollectionUtils.filter

案例:从一个对象集合中过滤出只符合要求的对象。如只保留叫 li 的人员信息

    @Test
    public void test2(){
        List<Student> stuList = new ArrayList<Student>();
        stuList.add(new Student("wang","18"));
        stuList.add(new Student("li","19"));
        stuList.add(new Student("li","20"));

        CollectionUtils.filter(stuList, new Predicate(){
            public boolean evaluate(Object arg0) {
                Student v = (Student)arg0;
                return StringUtils.isNotBlank(v.getName()) && "li".equals(v.getName());
            }
        });

        System.out.println(stuList); //[Student [name=li, age=19], Student [name=li, age=20]]
    }

**注意:这个Predicate类必须实现evaluate(Object obj) 方法,这个方法的返回值只要是 true,说明这个对象是要保留下来的。如这个里面的是取 姓名叫 li 的人,如果是其它特殊的、变动的名称。可以另外新创建一个 实现 Predicate的类。

4 CollectionUtils.select

/**
 * 集合筛选
 */
@Test
public void test11() {
    List<Student> stuList = new ArrayList<Student>();
    stuList.add(new Student("wang", "18"));
    stuList.add(new Student("li", "19"));
    stuList.add(new Student("li", "20"));

    @SuppressWarnings("unchecked")
    List<Student> wang = (List<Student>) CollectionUtils.select(stuList, new Predicate() {
        @Override
        public boolean evaluate(Object object) {
            if (Student.class.isAssignableFrom(object.getClass())) {
                Student param = (Student) object;
                if (StringUtils.isNotBlank(param.getName()) && "wang".equalsIgnoreCase(param.getName())) {
                    return true;
                }
            }
            return false;
        }
    });

    @SuppressWarnings("unchecked")
    List<Student> li = (List<Student>) CollectionUtils.select(stuList, new Predicate() {
        @Override
        public boolean evaluate(Object object) {
            if (Student.class.isAssignableFrom(object.getClass())) {
                Student param = (Student) object;
                if (StringUtils.isNotBlank(param.getName()) && "li".equalsIgnoreCase(param.getName())) {
                    return true;
                }
            }
            return false;
        }
    });

    System.out.println(StringUtils.join(wang)); // [Student [name=wang, age=18, birthdaynull]]
    System.out.println(StringUtils.join(li));  // [Student [name=li, age=19, birthdaynull], Student [name=li, age=20, birthdaynull]]
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值