`
韩悠悠
  • 浏览: 841929 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Commons Collections - Transformer

阅读更多

接下来看Transformer组。

Transformer

ChainedTransformer

SwitchTransformer

TransformerUtils 

我们有时候需要将某个对象转换成另一个对象供另一组方法调用,而这两类对象的类型有可能并不是出于同一个继承体系的,或者说出了很基本的Object之外没有共同的父类,或者我们根本不关心他们是不是有其他继承关系,甚至就是同一个类的实例只是对我们而言无所谓,我们为了它能够被后续的调用者有意义的识别和处理,在这样的情形,我们就可以利用Transformer。除了基本的转型Transformer之外,Commons Collections还提供了Transformer链和带条件的Transformer,使得我们很方便的组装出有意义的转型逻辑。 

假定我们在处理员工聘用时,需要将原来的Applicant对象转换为Employee对象,而Applicant类和Employee类无论继承关系、字段内容、具体业务职能等等都不是同一派系的,只是某些字段是相关的,且要求必要的转换,那么这个时候我们使用Transformer就可以比较方便的实现这项功能,并且由于它的实现是灵活的、模块化的,使得今后的维护也变得清晰和易于处理。代码如下: 

/** Applicant.java */ 

package sean.study.commons.collections; 

import org.apache.commons.lang.builder.ToStringBuilder;

import org.apache.commons.lang.builder.ToStringStyle;

 

public class Applicant {

       private String name;

    private int age;

    private String applyFor;   

    public Applicant() {

    }

 

    public Applicant(String name, int age, String applyFor) {

        this.name = name;

        this.age = age;

        this.applyFor = applyFor;

    }   

    public String toString() {

        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)

                .append("name", name)

                .append("age", age)

                .append("applyFor", applyFor)

                .toString();

    }

 

    public int getAge() {

        return age;

    } 

    public void setAge(int age) {

        this.age = age;

    }

 

    public String getApplyFor() {

        return applyFor;

    }

 

    public void setApplyFor(String applyFor) {

        this.applyFor = applyFor;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

}

 

package sean.study.commons.collections;

import java.util.Date; 

import org.apache.commons.lang.builder.ToStringBuilder;

import org.apache.commons.lang.builder.ToStringStyle;

import org.apache.commons.lang.time.DateFormatUtils;

 

public class Employee { 

    private String name;

    private int age;

    private Date dateJoined;

    private String grade;

    private double salary;   

    public Employee() {

    }

 

    public Employee(String name, int age, Date dateJoined, String grade, double salary) {

        this.name = name;

        this.age = age;

        this.dateJoined = dateJoined;

        this.grade = grade;

        this.salary = salary;

    }   

    public String toString() {

        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)

                .append("name", name)

                .append("age", age)

                .append("dateJoined", DateFormatUtils.format(dateJoined, "yyyy-MM-dd"))

                .append("grade", grade)

                .append("salary", salary)

                .toString();

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.age = age;

    }

 

    public Date getDateJoined() {

        return dateJoined;

    }

 

    public void setDateJoined(Date dateJoined) {

        this.dateJoined = dateJoined;

    }

 

    public String getGrade() {

        return grade;

    }

 

    public void setGrade(String grade) {

        this.grade = grade;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

    public double getSalary() {

        return salary;

    }

 

    public void setSalary(double salary) {

        this.salary = salary;

    }

 

} 

 package sean.study.commons.collections; 

import java.util.Arrays;

import java.util.Collection;

import java.util.Date;

import java.util.Iterator;

import java.util.List; 

import org.apache.commons.collections.CollectionUtils;

import org.apache.commons.collections.Predicate;

import org.apache.commons.collections.Transformer;

import org.apache.commons.collections.functors.SwitchTransformer;

import org.apache.commons.lang.StringUtils; 

public class TransformerUsage { 

    public static void main(String[] args) {

        demoTransformerUsage();

    } 

    public static void demoTransformerUsage() {

 

        System.out.println(StringUtils.center(" demoTransformerUsage ", 40, "="));

 

        // data setup

        Applicant[] applicants = new Applicant[] {

            new Applicant("Tony", 26, "Developer"),

            new Applicant("Michelle", 24, "Tester"),

            new Applicant("Jack", 28, "Project Manager")

        };

        List appList = Arrays.asList(applicants);    

        // predicate setup

        Predicate isDeveloper = new Predicate() {

            public boolean evaluate(Object obj) {

                Applicant app = (Applicant) obj;

                return "Developer".equalsIgnoreCase(app.getApplyFor());

            }

        };

        Predicate isTester = new Predicate() {

            public boolean evaluate(Object obj) {

                Applicant app = (Applicant) obj;

                return "Tester".equalsIgnoreCase(app.getApplyFor());

            }

        };

        Predicate isPM = new Predicate() {

            public boolean evaluate(Object obj) {

                Applicant app = (Applicant) obj;

                return "Project Manager".equalsIgnoreCase(app.getApplyFor());

            }

        };

        Predicate[] checkApplyFor = new Predicate[] {

            isDeveloper,

            isTester,

            isPM

        };

分享到:
评论

相关推荐

    commons-collections-3.2.1.jar

    《Apache Commons Collections 3.2.1:Java集合框架的强大扩展》 Apache Commons Collections是Apache软件基金会的一个项目,它提供了一系列强大的、用于处理Java集合框架的工具类和算法。在这个项目中,`commons-...

    commons.collections-3.2.1和commons-beanutils-1.9.2和commons.collections-3.2.1

    Commons Collections和Apache BeanUtils是Java开发中常用的两个库,它们为开发者提供了丰富的工具类和功能,使得处理集合对象和Bean属性变得更加便捷。这两个库在Java Web开发中扮演着重要角色,尤其是在构建MVC框架...

    commons-collections4-4.1.jar

    Commons Collections是Apache软件基金会开发的一个Java库,主要提供对集合框架的增强和扩展。这个库是Java标准集合接口的补充,增加了许多实用的功能,提高了代码的可读性和效率。"commons-collections4-4.1.jar"是...

    commons-collections-3.2.1.rar代码及原jar文件

    Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了对Java内置集合类的增强功能和新的数据结构。在本文中,我们将深入探讨`commons-collections-3.2.1`版本的相关知识点。 首先,`commons-...

    commons-collections-3.2源码包

    《Apache Commons Collections 3.2源码解析》 Apache Commons Collections是Java开发中不可或缺的工具库,它极大地扩展了Java的内置集合框架,为开发者提供了更丰富的数据结构和算法实现。这个源码包,名为"commons...

    commons-collections-3.2.1-src.zip

    《Apache Commons Collections 深入解析》 Apache Commons Collections 是一个功能丰富的 Java 库,它扩展了 Java 核心库中的集合框架,提供了大量的实用工具类和算法,为开发人员在处理各种数据结构时提供了极大的...

    commons-collections4-4.1-bin.zip

    Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了大量的接口和类来增强Java的内置集合。这个"commons-collections4-4.1-bin.zip"压缩包包含了Apache Commons Collections的源码和jar包,版本为...

    commons-collections-3.2.1-bin

    Apache Commons Collections是一个Java库,它提供了对集合框架的扩展,增加了许多实用功能,极大地丰富了Java编程中的数据处理能力。这个"commons-collections-3.2.1-bin"压缩包包含的是Apache Commons Collections ...

    commons-collections4-4.0.rar

    Apache Commons Collections是一个强大的Java集合框架的扩展库,它为Java的内置集合类提供了大量实用工具和接口,极大地丰富了集合操作的功能。这个"commons-collections4-4.0.rar"文件是Apache Commons Collections...

    commons-collections-3 jar

    《Apache Commons Collections 3详解》 Apache Commons Collections(简称Collections)是Apache软件基金会开发的一个Java类库,它为Java集合框架提供了丰富的扩展和实用工具。本文将深入探讨`commons-collections-...

    commons-collections4-4.4-bin.tar.gz

    Apache Commons Collections 4.4是Java开发人员常用的一个开源库,它是Apache软件基金会的一个项目,提供了许多实用的集合框架扩展,极大地丰富了Java标准库中集合类的功能。这个版本是4.4,属于项目的最新稳定版,...

    commons-collections4-4.0

    Apache Commons Collections是一个非常重要的Java库,它为Java集合框架提供了大量的扩展和实用工具。这个库被称为"commons-collections4-4.0",表明它是Apache Commons Collections的第4个主要版本,版本号为4.0。这...

    commons-collections4-4.4.rar

    《Apache Commons Collections 4.4:Java编程的强大工具》 Apache Commons Collections,简称Collections,是Apache软件基金会开发的一个Java库,旨在提供对Java集合框架的扩展和增强。这个库包含了丰富的算法实现...

    commons-collections-3.1.zip

    8. `org.apache.commons.collections.functors`:这个包提供了各种函数对象(Functor),它们可以作为谓词(Predicate)、工厂(Factory)、转换器(Transformer)等,用于实现函数式编程的模式。 9. `org.apache....

    Apache commons-collections4-4.1 Src压缩包

    Apache Commons Collections是一个强大的Java库,它是Apache软件基金会的一部分,专门用于增强Java的集合框架。这个库提供了大量的实用工具类和算法,扩展了Java标准库中集合接口的功能,使得开发人员可以更加高效、...

    aduna-commons-collections-2.7.0.jar.zip

    《Aduna Commons Collections 2.7.0:Java编程中的集合框架增强库》 Aduna Commons Collections 是一个基于 Java 的开源库,它扩展了 Java 标准库中的集合框架,提供了更多的数据结构、算法和实用工具类。这个库在 ...

    commons-collections4-4.4-bin.zip

    Apache Commons Collections是一个Java库,它提供了对集合框架的扩展,增加了许多实用功能。这个库的主要目标是增强Java标准集合接口的灵活性、性能和功能性。在"commons-collections4-4.4-bin.zip"中,我们获得了...

    commons-collections

    "commons-collections"是Apache软件基金会的一个开源项目,它提供了一系列强大的、实用的集合框架扩展,使得在Java编程中处理集合对象变得更加方便和灵活。这个jar包包含了多种实用的工具类和接口,扩展了Java标准...

    Apache Commons Collections 4.0 API+jar包

    Apache Commons Collections 4.0 API 是一个非常重要的Java库,它是Apache软件基金会开发的一个开源项目。这个库提供了大量的集合框架的扩展,使得开发者能够更高效、便捷地处理各种数据结构和算法。Apache Commons ...

Global site tag (gtag.js) - Google Analytics