`
xurichusheng
  • 浏览: 335782 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用Comparator做对象的排序

阅读更多

 

之前在面试的时候,人家老是问怎么对对象进行排序。

虽然在项目中也有看到过人家写的代码,但是自己没亲自写过,也没什么记得住。

今天闲来没事,自己写了个简单的。

 

 

框架:Spring  Hibernate

          具体的配置这里不贴出来了。

 

主要是用 java.util. Collections的方法 sort(List <T> list, Comparator <? super T> c)

 

下面是代码:

 

实体类:

 

import java.io.Serializable;

public class UserTest implements Serializable {

	/**
	 * @Fields serialVersionUID : TODO
	 */
	private static final long serialVersionUID = 9171568900755918349L;

	private String userId;
	private String userName;
	private int age;
	
	@Override
	public String toString() {
		
		StringBuffer buf = new StringBuffer();
		
		buf.append("UserTest:[");
		buf.append("userId=").append(getUserId());
		buf.append(",userName=").append(getUserName());
		buf.append(",age=").append(getAge());
		buf.append("]");
		
		return buf.toString();
	}
	
	//省略 setter/getter 方法
}
 

DAO层代码也省略,直接贴出测试代码:

 

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;

import junit.framework.TestCase;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUserDAO extends TestCase {

	private IUserTestDAO userTestDAO = null;

	@Override
	protected void setUp() throws Exception {

		try {
			AbstractApplicationContext act = new ClassPathXmlApplicationContext(
					"applicationContext.xml");
			userTestDAO = (IUserTestDAO) act.getBean("userTestDAO");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void getListUser() {

		try {
			List<UserTest> list = userTestDAO.findObjects("from UserTest");

			// 根据userName降序排序
			Collections.sort(list, new Comparator<UserTest>() {

				@Override
				public int compare(UserTest o1, UserTest o2) {
					return o2.getUserName().compareTo(o1.getUserName());
				}

			});

			for (UserTest user : list) {
				System.out.println(user);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

如果要根据userName做升序排序,只需要改成:

 

o1.getUserName().compareTo(o2.getUserName());

 

注意 o1和o2的顺序。

 

测试结果:

UserTest:[userId=fdebc42b-18e9-49b0-8903-7068b0d9e652,userName=ccc,age=33]
UserTest:[userId=1bec68d8-e781-43fb-909e-78da901353ba,userName=bbb,age=22]
UserTest:[userId=3d174d47-db21-4805-b631-f12ffd0dbacc,userName=aaa,age=11]

 

下面是数据库中的值:


  • 大小: 20.1 KB
分享到:
评论

相关推荐

    Compable和Comparator自定义对象属性排序

    可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组

    List对象集合的排序:比较器Comparator(简单例子)

    List对象集合的排序:比较器Comparator

    JAVA集合的使用(List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类、equals、hashCode)

    要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode

    java排序代码

    定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口实现类对象与该TreeSet集合关联, 由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements...

    Comparator

    利用org.apache.commons.beanutils.BeanComparator.BeanComparator 类对对象属性进行排序。

    对比Java中的Comparable排序接口和Comparator比较器接口

    Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口

    Java中的策略模式,完成一个简单地购物车,两种付款策略实例教程.docx

    策略模式是一种行为模式 。用于某一个具体的项目有多个可供选择的算法...使用这种模式最好的例子是Collection.sort()方法了,它使用Comparator对象作为参数。根据Comparator接口不同实现,对象会被不同的方法排序。

    再谈Comparator

    例如,假设有一个Person对象数组,可以按名字对这些对象偶排序: Array.sort(people, Comparator.comparing(Peron::getName); 与手动实现一个Comparator相比,这当然要容易得多。另外,代码也加

    java实现别踩白块儿源码-SortedList:用Java编写的SortedList的实现。可以与实现Comparable接口的对象一起使用

    它是使用Comparator对象构造的,该对象可以将两个对象进行比较,从而使SortedList可以将其元素按升序或降序排序。 当且仅当要使用的对象实现Comparable接口时,我们也可以创建不带Comparator对象的SortedList。 用法...

    ComparatorTools.zip

    Comparator Tools 是 PHP 实现的 Java Compareable 接口,用来实现对象的排序已经一些排序的方法。 标签:Comparator

    java常用工具类的使用

    DateFormat是一个抽象类,不能直接实例化,可以使用下表中的静态方法得到DateFormat的对象。 方法 说明 getDateInstance() 返回默认地区,默认格式的关于日期的DateFormat对象。 getDateInstance(int) 返回指定...

    ubersort:可配置的基于优先级的排序

    优步排序可配置的基于优先级的复杂对象数组排序。使用bower install --save ubersort 内置比较器文本比较区分大小写字符串数值按数值比较自定义Array.prototype.ubersort.addComparator添加的函数(见下文)方法超级...

    JIDE Grids (表格)开发员技术手册

    归一化的对象比较机制(Centralized object comparator mechanism )-自定义对象的比较,并能在排序时被排序表使用 表实用类TableUtils class - 收集一些JTable有用功能的实用类。 集合实用类ListUtils class -...

    Comparable接口和Comparator接口的比较

    实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。 此 接口只有一个方法...

    Android实现中文按拼音排序方法

    本文的需求是将一组数据按某一字段...其中strList中放置了数据,可以是任何对象,但要对PinyinComparator中的compare进行对应的修改,我Demo中为String[]。 2、PinyinComparator排序类: public class PinyinCompara

    AIC的Java课程1-6章

     知道实现比较器(Comparable,Comparator)用于排序算法(多态性)。  [*]了解同步包装和不可修改包装。 第12章 IO与串行化 2课时  了解Java IO 中类的层次结构,介绍Java IO采用的装饰...

    习----题-Java-Web程序设计教程-[共2页].pdf

    (2)在测试类中生成多个学生类的对象,放入 TreeSet 中,要求按照 3 门课总成绩从高到低 排序,总成绩相等按学号排序。输出排序结果。 注意实现 Comparator 接口的 compare(Object obj1,Object obj2)函数。 4.以 ...

    SortHomework

    在PhonebookApp类中,添加sortWithComparator方法,该方法接收两个参数:人员数组和实现Comparator接口的类的对象。 通过将sortWithComparator与两个不同的比较器一起使用,使用sortByFirstName和sortByLastName...

    zadaciZaSamostalanRad.Predavanje.7.1.15

    在PhonebookApp类中,添加sortWithComparator方法,该方法接收两个参数:人员数组和实现Comparator接口的类的对象。 通过将sortWithComparator与两个不同的比较器一起使用,使用sortByFirstName和sortByLastName...

Global site tag (gtag.js) - Google Analytics