实现java.util.Comparator接口,对对象集合进行多属性组合排序

Commons - BeanUtils 提供了很多功能,其中一个很有用的是对对象集合进行排序,如Collections.sort(peoples, new BeanComparator("age"));

另外,可以使用java.util.Collections的sort方法可以对collection集合进行排序,包括多列组合排序,下面是自己实现java.util.Comparator,定制对象属性排序规则的例子:

package com.lph.test;

import java.util.Comparator;

import java.util.Iterator;

import java.util.List;

import java.util.LinkedList;

/** 

* 自定义对象多属性(多列)组合排序
* <p>Title: is a Class</p> 

* <p>Description: 类</p> 

* <p>Copyright: Copyright (c) 2006</p> 

* <p>Company: sunrise</p> 

@author islph 
@version 1.0 
*/ 
public class CompositeComparator implements Comparator {

/** in the condition list, comparators‘ priority decrease from head to tail */

private List comparators = new LinkedList();

/** get the comparators, you can manipulate it as need. */

public List getComparators() {

return comparators;

}

/** add a batch of comparators to the condition list */

public void addComparators(Comparator[] comparatorArray) {

if (comparatorArray == null) {

return;

}

for (int i = 0; i < comparatorArray.length; i++) {

comparators.add(comparatorArray[i]);

}

}

/** compare by the priority */

public int compare(Object o1, Object o2) {

for (Iterator iterator = comparators.iterator(); iterator.hasNext();) {

Comparator comparator = (Comparator) iterator.next();

int result = comparator.compare(o1, o2);

if (result != 0) {

return result;

}

}

return 0;

}

}

// 多列排序;按属性COUNTY_NO镇,DDP_ID终端 组合排序

CompositeComparator myComparator = new CompositeComparator();

myComparator.addComparators(

new Comparator[] {

new Comparator() {

public int compare(Object a, Object b) {

DisplayForm aObj, bObj;

aObj = (DisplayForm) a;

bObj = (DisplayForm) b;

String aStr = (String) aObj.get("COUNTY_NO");

String bStr = (String) bObj.get("COUNTY_NO");

return aStr.compareTo(bStr);

}

}

new Comparator() {

public int compare(Object a, Object b) {

DisplayForm aObj, bObj;

aObj = (DisplayForm) a;

bObj = (DisplayForm) b;

String aStr = (String) aObj.get("DDP_ID");

String bStr = (String) bObj.get("DDP_ID");

return aStr.compareTo(bStr);

}

}

});

java.util.Collections.sort(listResult, myComparator);

时间: 2024-12-10 06:24:58

实现java.util.Comparator接口,对对象集合进行多属性组合排序的相关文章

java lang(Comparable接口) 和java util(Comparator接口)分析比较

//Comparable 接口强行对实现它的每个类的对象进行整体排序. -- 自然排序.类的compareTo称为自然比较方法. public interface Comparable<T> { public int compareTo(T o); } 此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法. 实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序

Java TreeSet集合排序 &amp;&amp; 定义一个类实现Comparator接口,覆盖compare方法 &amp;&amp; 按照字符串长度排序

package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式

java中Comparator的用法 -- 实现集合和数组排序

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.ljq.entity; /** * */public class Step{ /** 时间 */ private String acceptTime = ""; /** 地点 */ private String acceptAddress = ""; public Ste

java----数据结构与算法----JavaAPI:java.util.Collection接口

Java API--java.util.Collection接口 /** * @author chen * @date 20170317 * @description:本程序讲述Collection接口 * java.util.Collection * 概述:Collection接口是Set和List接口的父接口,Collection接口中定义了一些 * 用于集合元素操作的方法,被其子接口以及子接口的实现类所继承 * 构造函数 * java中接口不能有构造函数 * 成员函数: * [1]概述,由

Java:Comparator接口

public interface Comparator<T> 接口里面的方法 int compare(T o1, T o2) o1 > o2 返回 1 o1 = o2 返回 0 o1 < o2 返回 -1 boolean equals(Object obj) 判断是否相等 其他方法:https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html 强行对某个对象 collection 进行整体排序 的比较函数.可

Java中Comparator接口

Comparator位于java.util包下 public interface Comparator<T> 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序. 当且仅当对于一组

使用Java中Comparator接口实现自定义排序

一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接口来实现对复杂对象的排序还是很有必要的.Java中有两个用来实现排序的接口Comparator和Comparable接口,本人比较喜欢使用java的Comparator接口,在程序里实现Comparator接口里的compare(Object o1,Object o2)方法,然后在程序中通过调用Ar

java----数据结构与算法----JavaAPI:java.util.List接口

java.util.List接口 /** * @author lxrm * @date 20170307 * @description 本程序讲述java.util.List接口的用法 * java.util.List * 概述: * 1)List接口是Collection接口的子接口,所以List接口拥有Collection接口所定义的所有成员函数 * 除了有其父接口Collection中所定义的所有函数之外,List接口也添加了自己的函数,使得List集合拥有自己的特色 * List接口中新

java之Set接口(单列集合)

Set接口概述 java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了.与 List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复.Set 集合有多个子类,这里我们介绍其中的 java.util.HashSet . java.util.LinkedHa