- 浏览: 546507 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
接下来看Closure组。
Closure
ChainedClosure
IfClosure
WhileClosure
ClosureUtils
Closure这一组接口和类提供一个操作对象的execute方法,为我们在处理一系列对象时可以将处理逻辑分离出来。理论上讲,使用Transformer也可以达到类似的效果,只要输出对象和输入对象是同一个对象就好,但是Closure接口定义的execute方法返回void,并且从效果和功能区分上,Closure可以更好的诠释对象处理或执行的意思。而事实上,ClosureUtils中也提供了一个asClosure方法包装一个现成的Transformer。
沿用前面的Emploee类,我们来给一组员工涨工资:
package sean.study.commons.collections;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
public class ClosureUsage {
public static void main(String[] args) {
demoClosureUsage();
}
public static void demoClosureUsage() {
System.out.println(StringUtils.center(" demoClosureUsage ", 40, "="));
// data setup
Employee[] employees = new Employee[] {
new Employee("Tony", 26, new Date(), "E4", 2000),
new Employee("Michelle", 24, new Date(), "E4", 2000),
new Employee("Jack", 28, new Date(), "E5", 3000)
};
Collection empColl = Arrays.asList(employees);
printColl("Before salary increase:", empColl);
// closure setup
Closure salaryIncreaseClosure = new Closure() {
public void execute(Object obj) {
Employee emp = (Employee) obj;
emp.setSalary(emp.getSalary() * 1.20);
}
};
// salary increase
CollectionUtils.forAllDo(empColl, salaryIncreaseClosure);
printColl("After salary increase:", empColl);
System.out.println(StringUtils.repeat("=", 40));
}
public static void printColl(String label, Collection c) {
if (StringUtils.isNotBlank(label)) {
System.out.println(label);
}
Iterator iter = c.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
以下是运行结果:
=========== demoClosureUsage ===========
Before salary increase:
Employee[name=Tony,age=26,dateJoined=2005-08-05,grade=E4,salary=2000.0]
Employee[name=Michelle,age=24,dateJoined=2005-08-05,grade=E4,salary=2000.0]
Employee[name=Jack,age=28,dateJoined=2005-08-05,grade=E5,salary=3000.0]
After salary increase:
Employee[name=Tony,age=26,dateJoined=2005-08-05,grade=E4,salary=2400.0]
Employee[name=Michelle,age=24,dateJoined=2005-08-05,grade=E4,salary=2400.0]
Employee[name=Jack,age=28,dateJoined=2005-08-05,grade=E5,salary=3600.0]
========================================
我这里举的是一个相对简单的例子,在Closure这一组还有一些很方便的类,如ChainedClosure可以包装一组Closure作为整体执行;IfClosure在创建时需要提供给它一个Predicate和两个Closure,执行时先做Predicate判定再决定执行哪一个Closure;SwitchClosure跟SwitchTransformer类似,根据创建时传入的Predicate组和Closure组对应执行;WhileClosure则根据创建时传入的Predicate做判断,如果为true则执行Closure,直到Predicate返回false;等等。
具体用法请参考Javadoc。
发表评论
-
妙用Commons良药 StringUtils
2011-03-08 10:48 1320来自:http://lighter.iteye.c ... -
分享 commons io 工具类 代码
2011-03-04 17:53 1148来自:http://www.iteye.com/topic/5 ... -
Jakarta Commons笔记] 结语
2008-11-12 11:15 1278在前面的随笔中,我们一起过了一遍Jakarta Common ... -
Commons Collections - Transformer组 补充
2008-11-12 11:11 1290// transformer setup T ... -
Commons Collections - Transformer
2008-11-12 10:19 1507接下来看Transformer组。 T ... -
[Jakarta Commons笔记]Commons Collections - Predicate
2008-11-12 10:17 2042接下来看Predicate组 Predicate And ... -
Commons Collections - Comparator组
2008-11-12 09:55 1372接下来我们会讲到辅助类,首先看Comparator组。 R ... -
Commons Collections - Collection 组
2008-11-12 09:43 1322接下来看看Collection组。 TypedColle ... -
[Jakarta Commons笔记] Commons Collections - Map组
2008-11-12 09:39 1574接下来看Map组。 BidiMap MultiMap L ... -
[Jakarta Commons笔记] Commons Collections - Buffer组
2008-11-12 09:23 1403来看Buffer组。 Buffer BlockingBuf ... -
[Jakarta Commons笔记] Commons Collections - Bag组
2008-11-11 17:48 1296先来看Bag组。 Bag HashBag BagUtils ... -
[Jakarta Commons笔记] Commons Collections
2008-11-11 17:30 2342Commons Collections,又是 ... -
[Jakarta Commons笔记] 代码范例 - BeanUtils
2008-11-11 16:56 1226假定我们有如下两个标准的JavaBean: /** Ad ... -
[Jakarta Commons笔记] Commons BeanUtils
2008-11-11 16:44 1935Jakarta Commons项目提供了相当丰富的API,我们 ... -
[Jakarta Commons笔记] org.apache.commons.lang.time
2008-11-11 16:14 1818好了,来看我在Common Lang中最后要讲的一个包:org ... -
[Jakarta Commons笔记] org.apache.commons.lang.math
2008-11-11 16:12 1809在Jakarta Commons中,专门处理数学计算的类分别可 ... -
[Jakarta Commons笔记] commons.lang.builder
2008-11-11 15:36 1104在前面的专题文章中,我们一起过了一遍org.apache.c ... -
[Jakarta Commons笔记] 代码范例 - ArrayUtils StringUtils
2008-11-11 15:34 1681数组是我们经常需要使用到的一种数据结构,但是由于Java本身 ... -
[Jakarta Commons笔记] Commons Lang
2008-11-11 15:32 2687跟java.lang这个包的作用类似,Commons Lang ... -
[Jakarta Commons笔记] 开篇
2008-11-11 13:45 1145在Java的世界,有很多(成千上万)开源的框架,有成功的,也 ...
相关推荐
apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-commons-fileupload.jar apache-jakarta-commons-httpclient.jar apache-jakarta-...
jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,它的全称为"Jakarta Commons DBCP"。这个连接池库被设计用来管理数据库连接,提高应用程序的性能和效率。在Java应用程序中,频繁地...
**Jakarta Commons API** 是一个Java开发人员广泛使用的开源库集合,它包含了多个模块,每个模块专注于特定的编程任务,从而简化了Java应用程序的开发。Jakarta Commons是Apache软件基金会的一个项目,它提供了大量...
tomcat10 升级转换工具 命令:java -jar jakartaee-migration-版本号-shaded.jar D:\源路径\demo.war D:\目标路径\newdemo.war
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:jakarta.validation-api-2.0.1.jar; 赠送原API文档:jakarta.validation-api-2.0.1-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...
赠送jar包:jakarta.validation-api-2.0.2.jar; 赠送原API文档:jakarta.validation-api-2.0.2-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.2-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
离线安装包,亲测可用
赠送jar包:jakarta.xml.bind-api-2.3.3.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.3-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.3-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...
赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...
赠送jar包:jakarta.activation-api-1.2.2.jar; 赠送原API文档:jakarta.activation-api-1.2.2-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.2-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
这个库提供了一个统一的日志接口,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java内置的java.util.logging或Jakarta LogKit等。Commons Logging的主要优势在于解耦,它使得应用程序与具体日志...
赠送jar包:jakarta.xml.bind-api-2.3.3.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.3-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.3-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...
赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装