list 怎么自定义排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了list 怎么自定义排序相关的知识,希望对你有一定的参考价值。
有什么API 没有 能 让我把 list 里面的 类按我想要的 字段排序 。 比如 我 一个放了 很多User 对象的 list 按 User 对象的 birthday 字段排序。 要效率高的哦 。
参考技术A package com.wxsoft.sale.util;import java.text.CollationKey;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
/**
* 用于集合排序的类
* @author Administrator
* @createdate 2007-7-13 下午04:10:17
*/
public class SortCollection
/**
* 升序
*/
public static final int ASC = 1;
/**
* 降序
*/
public static final int DESC = 2;
private List list;
private ComparatorChain myBeanComparator = new ComparatorChain();
public SortCollection(List list)
this.list = list;
/**
* 增加排序字段(升序)
* @param field 用于排序的字段名
*/
public void addSortField(String field)
addSortField(field, ASC);
/**
* 增加排序字段
* @param field 用于排序的字段名
* @param sort 升序还是降序
*/
public void addSortField(String field, int sort)
Comparator factoryComparator = new BeanComparator(field, new CollatorComparator(sort));
myBeanComparator.addComparator(factoryComparator);
/**
* 排序
*/
public void sort()
Collections.sort(list, myBeanComparator);
/**
* 用于排序的内部类
* @author Administrator
* @createdate 2007-7-13 下午04:24:51
*/
private class CollatorComparator implements Comparator
/**
* 用于判断是升序还是降序的标志
*/
private int sort = ASC;
private Collator collator = Collator.getInstance();
public CollatorComparator(int sort)
this.sort = sort;
public int compare(Object element1, Object element2)
CollationKey key1 = collator.getCollationKey(element1.toString());
CollationKey key2 = collator.getCollationKey(element2.toString());
if (sort == ASC)
return key1.compareTo(key2);
else
return key2.compareTo(key1);
//调用方法
SortCollection sort= new SortCollection(list);
sort.addSortField("field1");
sort.addSortField("field2",SortCollection.ASC);
sort.addSortField("field3",SortCollection.DESC);
sort.addSortField("field4");
sort.sort(); 参考技术B 1.先实现Comparator接口,给出一个排序的实现类
2.Comparator 排序实例 = new 第一部创建的类();
Collections.sort(你的list实例,上面创建的排序实例);
参考http://mht.javaeye.com/blog/186130本回答被提问者采纳 参考技术C 告诉你编程时最常用的做法:
Collections.sort(List list,new Comparator()
1:实现该接口的方法,具体看API。
);
其实原理和1楼是一样的,这是在实际项目按开发中最简洁的写法,效率没问题。实际项目开发最好掌握匿名内部类的使用
Collections自定义List排序规则,进行自定义排序
//这里的顺序,是我自己定义的一个List<String> String[] regulation = {"诸葛亮","鲁班","貂蝉","吕布"}; final List<String> regulationOrder = Arrays.asList(regulation); String[] ordered = {"貂蝉","诸葛亮","吕布","貂蝉","鲁班","诸葛亮","貂蝉","鲁班","诸葛亮"}; List<String> orderedList = Arrays.asList(ordered); Collections.sort(orderedList, new Comparator<String>() { public int compare(String o1, String o2) { int io1 = regulationOrder.indexOf(o1); int io2 = regulationOrder.indexOf(o2); return io1 - io2; } }); System.out.println(orderedList);
原 :http://blog.csdn.net/u012854870/article/details/78052159
以上是关于list 怎么自定义排序的主要内容,如果未能解决你的问题,请参考以下文章