- 浏览: 546492 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
接下来我们会讲到辅助类,首先看Comparator组。
ReverseComparator
ComparatorChain
NullComparator
FixedOrderComparator
ComparatorUtils
其实Comparator这个概念并不是Commons Collections引入的,在标准的Java Collections API中,已经明确定了一个java.util.Comparator接口,只是有很多人并不了解,Commons Collections也只是扩展了这个接口而已。这个java.util.Comparator定义如下核心方法:
public int compare(Object arg0, Object arg1)
传给它两个对象,它要告诉我们这两个对象哪一个在特定的语义下更“大”,或者两者相等。如果arg0 > arg1,返回大于0的整数;如果arg0 = arg1,返回0;如果arg0 < arg2,返回小于0的整数。
我们看看Commons Collections给我们提供了哪些Comparator的实现类(都在org.apache.commons.collections.comparators包下面):
BooleanComparator – 用于排序一组Boolean对象,指明先true还是先false;
ComparableComparator – 用于排序实现了java.lang.Comparable接口的对象(我们常用的Java类如String、Integer、Date、Double、File、Character等等都实现了Comparable接口);
ComparatorChain – 定义一组Comparator链,链中的Comparator对象会被依次执行;
FixedOrderComparator – 用于定义一个特殊的顺序,对一组对象按照这样的自定义顺序进行排序;
NullComparator – 让null值也可参与比较,可以设定为先null或者后null;
ReverseComparator – 将原有的Comparator效果反转;
TransformingComparator – 将一个Comparator装饰为具有Transformer效果的Comparator。
// 有关Transformer的内容会在以后的笔记中讲到。
以上除了ComparatorChain之外,似乎都是实现一些很基本的比较方法,但是当我们用ComparatorChain将一组Comparator串起来之后,就可以实现非常灵活的比较操作。那么这些Comparator在实际代码中如何使用呢?看例子:
/** Issue.java */
package sean.study.commons.collections;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class Issue {
private long id;
private String severity;
private String owner;
public Issue() {
}
public Issue(long id, String severity, String owner) {
this.id = id;
this.severity = severity;
this.owner = owner;
}
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("id", id)
.append("severity", severity)
.append("owner", owner)
.toString();
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getSeverity() {
return severity;
}
public void setSeverity(String severity) {
this.severity = severity;
}
}
/** ComparatorUsage.java */
package sean.study.commons.collections;
import java.util.Arrays;
import java.util.Comparator;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.commons.collections.comparators.FixedOrderComparator;
import org.apache.commons.lang.StringUtils;
public class ComparatorUsage {
public static void main(String[] args) {
demoComparator();
}
public static void demoComparator() {
System.out.println(StringUtils.center(" demoComparator ", 40, "="));
// data setup
Issue[] issues = new Issue[] {
new Issue(15102, "Major", "John"),
new Issue(15103, "Minor", "Agnes"),
new Issue(15104, "Critical", "Bill"),
new Issue(15105, "Major", "John"),
new Issue(15106, "Major", "John"),
new Issue(15107, "Critical", "John"),
new Issue(15108, "Major", "Agnes"),
new Issue(15109, "Minor", "Julie"),
new Issue(15110, "Major", "Mary"),
new Issue(15111, "Enhancement", "Bill"),
new Issue(15112, "Minor", "Julie"),
new Issue(15113, "Major", "Julie")
};
// comparators setup
String[] severityOrder = {"Critical", "Major", "Minor", "Enhancement"};
Comparator severityComparator = new FixedOrderComparator(severityOrder);
ComparatorChain compChain = new ComparatorChain();
compChain.addComparator(new BeanComparator("owner"));
compChain.addComparator(new BeanComparator("severity", severityComparator));
compChain.addComparator(new BeanComparator("id"));
// sort and display
Arrays.sort(issues, compChain);
for (int i = 0; i < issues.length; i++) {
System.out.println(issues[i]);
}
System.out.println(StringUtils.repeat("=", 40));
}
}
输出结果为:
============ demoComparator ============
Issue[id=15108,severity=Major,owner=Agnes]
Issue[id=15103,severity=Minor,owner=Agnes]
Issue[id=15104,severity=Critical,owner=Bill]
Issue[id=15111,severity=Enhancement,owner=Bill]
Issue[id=15107,severity=Critical,owner=John]
Issue[id=15102,severity=Major,owner=John]
Issue[id=15105,severity=Major,owner=John]
Issue[id=15106,severity=Major,owner=John]
Issue[id=15113,severity=Major,owner=Julie]
Issue[id=15109,severity=Minor,owner=Julie]
Issue[id=15112,severity=Minor,owner=Julie]
Issue[id=15110,severity=Major,owner=Mary]
========================================
我们可以看到,ComparatorChain中的Comparator被依次执行,先按name,再按我们自定义的severity次序,再按id,最终我们得到了重新排列的数组。
发表评论
-
妙用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 ... -
[Jakarta Commons笔记] Commons Collections - Closure组
2008-11-12 10:31 1577接下来看Closure组。 Closure Chaine ... -
Commons Collections - Transformer
2008-11-12 10:19 1506接下来看Transformer组。 T ... -
[Jakarta Commons笔记]Commons Collections - Predicate
2008-11-12 10:17 2042接下来看Predicate组 Predicate And ... -
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 1103在前面的专题文章中,我们一起过了一遍org.apache.c ... -
[Jakarta Commons笔记] 代码范例 - ArrayUtils StringUtils
2008-11-11 15:34 1680数组是我们经常需要使用到的一种数据结构,但是由于Java本身 ... -
[Jakarta Commons笔记] Commons Lang
2008-11-11 15:32 2686跟java.lang这个包的作用类似,Commons Lang ... -
[Jakarta Commons笔记] 开篇
2008-11-11 13:45 1145在Java的世界,有很多(成千上万)开源的框架,有成功的,也 ...
相关推荐
《Apache Commons Collections 3.2.2:Java开发的强大工具》 Apache Commons Collections,简称Collections,是Apache软件基金会提供的一款开源Java库,它为Java集合框架提供了大量的实用工具类和扩展功能。在Java...
`commons-collections-3.2.2-bin.tar`是一个压缩包,它包含了Apache Commons Collections库的3.2.2版本。这个库是Java编程语言中一个非常重要的工具集,专门用于处理集合框架,如列表、映射、集合等。Apache Commons...
Apache Commons Collections 包含多个模块,如 Bag、BidiMap、Buffer、Comparator、Functor、Iterator、Map、Multimap、Set、TransformedMap、TypeConverter 等。这些模块提供了丰富的接口和实现,使得开发者能够...
Commons-Collections seek to build upon the JDK classes by providing new interfaces, implementations and utilities. There are many features, including: Bag interface for collections that have a number...
"commons-collections"是Apache软件基金会的一个开源项目,它提供了一系列强大的、实用的集合框架扩展,使得在Java编程中处理集合对象变得更加方便和灵活。这个jar包包含了多种实用的工具类和接口,扩展了Java标准...
Apache Commons Collections是一个非常重要的Java库,它为Java标准库中的`java.util`包提供了大量扩展,增加了许多实用的集合类、迭代器、映射和转换功能。这个库被广泛用于提高开发效率,尤其是在处理和操作数据...
Commons Collections是一个开源的Java集合框架扩展库,它对Java标准的Collections API提供了大量的补充和改进。它的出现主要是为了解决Java标准集合框架在使用过程中遇到的一些问题,比如操作过于复杂、不够灵活或者...
- **活跃度与更新**:Guava Collections 处于积极维护的状态,持续更新并引入新功能,而 Commons Collections 最近一次更新已较为久远。 #### 四、总结 Google Guava Collections 不仅提供了丰富的工具和功能,还...
Comparator组 提供了比较器的工具方法,如组合多个比较器、反向比较等。 ##### 3.5. 算子组 - **Predicate**:用于判断一个对象是否满足某个条件。 - **Transformer**:用于将一个对象转换为另一个对象。 - **...
Commons Collections库为Java标准集合框架提供了扩展。它包含以下组件: - Bag:存储对象的集合,但对象可以出现多次。 - Buffer:提供队列、栈和缓冲区的实现。 - BiDiMap:双向映射,允许从键映射到值,反之亦然...
在给定的"比较器Comparator简单用法"主题中,我们将深入探讨如何使用`Comparator`以及Apache Commons Lang库中的相关方法。 首先,`Comparator`接口位于`java.util`包下,它包含一个方法`compare(T o1, T o2)`,...
- `commons-collections-2.1.1.jar`: Apache Commons Collections库。 - `velocity-1.4.jar`: Apache Velocity模板引擎。 - `commons-beanutils-core-1.6.jar`: Apache Commons BeanUtils库,主要用于处理Bean...
- ArrayUtils:提供了数组操作的工具方法,如数组复制、填充等。 - StringUtils:提供了大量的字符串操作方法,如字符串的判空、替换、分割等。 - BooleanUtils:提供了布尔值相关操作的工具方法。 - CharUtils...
在这个场景中,我们关注的是`org.apache.commons.beanutils.BeanComparator`,这是一个由Apache Commons BeanUtils项目提供的特殊`Comparator`实现,它专门用来对对象的属性进行比较和排序。 `BeanComparator`类...
1. 类型安全:Guava Collections 基于 JDK5,充分利用了范型,确保类型安全,而 Apache Commons Collections 是基于 JDK1.2。 2. 接口契约:Guava 更严格地遵循 Java Collections Framework 的接口约定,减少了违反...
1. **集合框架**:Apache Commons Collections 提供了对Java集合接口的增强,包括更强大的列表、映射和堆栈实现。例如,`BidiMap`支持双向映射,`MultiMap`允许一个键对应多个值,以及`Comparator`和`Transformer`...
- 当元素类型不支持自然顺序或者需要按照特定规则排序时,可以提供一个Comparator实例给`Arrays.sort()`或`Collections.sort()`,通过重写`compare()`方法来定制排序逻辑。 5. **排序算法**: - Java中虽然内置了...
然后,可以使用`Collections.sort(list, comparator)`对List进行排序,其中`comparator`是`JiaMenuComparator`的实例。 3. **对List元素中的多个属性进行排序(使用commons-beanutils)** 当需要根据List元素的多...
- Apache Commons IO和Apache Commons Lang提供了实用的文件操作和比较工具,可以辅助大文件排序。 - Google的Guava库提供了`Multimap`,对于多字段排序可能有帮助。 总的来说,Java处理大文件多字段排序需要结合...