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 怎么自定义排序的主要内容,如果未能解决你的问题,请参考以下文章

关于自定义 List集合排序的方法!

Collections自定义List排序规则

自定义list排序

js简单对象List自定义属性排序

如何用java对excel进行自定义排序?

List自定义排序(可多条件)