论坛首页 Java企业应用论坛

依据List内部对象的某字段进行排序的方法

浏览 7261 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-01-23  

依据List内部对象的某字段进行排序的方法

List内部对象类IntStringtest为测试用例类

Collections.sort方法,实现对List的排序,需要重写Comparator方法

代码如下:

List里存放的实体

package org.iti.wxl.listobjectsort;

public class IntString {
	
	private Integer no;
	
	private String str;

	public Integer getNo() {
		return no;
	}

	public void setNo(Integer no) {
		this.no = no;
	}

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}

	@Override
	public String toString() {
		return "IntString [" + (no != null ? "no=" + no + ", " : "")
				+ (str != null ? "str=" + str : "") + "]";
	}

}

 

package org.iti.wxl.listobjectsort;

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

public class Test {
	public static void main(String[] args) {
		List<IntString> islist = new ArrayList<IntString>();
		IntString is1 = new IntString();
		is1.setNo(1);
		is1.setStr("计091");

		IntString is3 = new IntString();
		is3.setNo(3);
		is3.setStr("计093");

		IntString is2 = new IntString();
		is2.setNo(2);
		is2.setStr("计092");

		islist.add(is1);
		islist.add(is3);
		islist.add(is2);
		
		System.out.println(islist);
		Collections.sort(islist, new MyComparator());
		System.out.println(islist);
	}
}

class MyComparator implements Comparator<Object> {
	@Override
	public int compare(Object o1, Object o2) {
		IntString iso1 = (IntString)o1;
		IntString iso2 = (IntString)o2;
		String str1 = iso1.getStr();
		String str2 = iso2.getStr();
		return str1.compareTo(str2);
//		Integer no1 = iso1.getNo();
//		Integer no2 = iso2.getNo();
//		if(no1 > no2){
//			return 1;
//		}else if(no1 < no2){
//			return -1;
//		}else{
//			return 0;
//		}
	}

}

 如果是String类型的数据比较大小,Comparator方法里用str1.compareTo(str2) 方法,如果是数值比较大小,则用<,=,>比较,>返回1,=返回0,<返回-1。

   发表时间:2013-01-23  
如果在创建这个list的时候使用treeset,是不是可以省掉这个sort的费时呢?
当然不能全省,但是我觉得比sort方法快一点。
0 请登录后投票
   发表时间:2013-01-24  
  Collections.sort(list, new BeanComparator("str"));  
0 请登录后投票
   发表时间:2013-01-25  
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar
0 请登录后投票
   发表时间:2013-01-28  
alvin198761 写道
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar

你需要维护80行代码,而人家只需要维护1行代码。
0 请登录后投票
   发表时间:2013-01-28  
MrLee23 写道
alvin198761 写道
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar

你需要维护80行代码,而人家只需要维护1行代码。

那个comparator十行以内而已,哪有80行。。。
0 请登录后投票
   发表时间:2013-01-28  
Kisses99 写道
如果在创建这个list的时候使用treeset,是不是可以省掉这个sort的费时呢?
当然不能全省,但是我觉得比sort方法快一点。

你可以去比较一下树和快排的时间。。。tree是应对元素一直变化,需要一直排序的,collection.sort是针对一次排序大量数据。
0 请登录后投票
   发表时间:2013-01-28   最后修改:2013-01-30
Shen.Yiyang 写道
MrLee23 写道
alvin198761 写道
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar

你需要维护80行代码,而人家只需要维护1行代码。

那个comparator十行以内而已,哪有80行。。。

只不过是常用所以顺手写了一下.
没别的意思.
维护什么的不过是读的懂读不懂....
Collections.sort(list, new Comparator(){
     @Override 
    public int compare(Object o1, Object o2) { 
        IntString iso1 = (IntString)o1; 
        IntString iso2 = (IntString)o2; 
        String str1 = iso1.getStr(); 
        String str2 = iso2.getStr(); 
        return str1.compareTo(str2); 
    }
});
当str1为空时.....会报错....
所以对于这种空啊,非空啊,尽量使用
StringUtil
如果对于子属性什么的防御性编程
我认为太费神了...
测试使用请勿拷贝
data:text/html;charset=UTF-8,<SCRIPT>window.location.href='wsyd://www.baidu.com'</SCRIPT>

尽量使用别人维护的代码 apache-common
可以节约精神去研究业务
0 请登录后投票
   发表时间:2013-01-29  
抛出异常的爱 写道
Shen.Yiyang 写道
MrLee23 写道
alvin198761 写道
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar

你需要维护80行代码,而人家只需要维护1行代码。

那个comparator十行以内而已,哪有80行。。。

只不过是常用所以顺手写了一下.
没别的意思.
维护什么的不过是读的懂读不懂....
Collections.sort(list, new Comparator(){
     @Override 
    public int compare(Object o1, Object o2) { 
        IntString iso1 = (IntString)o1; 
        IntString iso2 = (IntString)o2; 
        String str1 = iso1.getStr(); 
        String str2 = iso2.getStr(); 
        return str1.compareTo(str2); 
    }
});
当str1为空时.....会报错....
所以对于这种空啊,非空啊,尽量使用
StringUtil
如果对于子属性什么的防御性编程
我认为太费神了...

尽量使用别人维护的代码 apache-common
可以节约精神去研究业务

+1
0 请登录后投票
   发表时间:2013-01-30  
lvwenwen 写道
抛出异常的爱 写道
Shen.Yiyang 写道
MrLee23 写道
alvin198761 写道
抛出异常的爱 写道
  Collections.sort(list, new BeanComparator("str"));  

你是写了一行代码,人家却要引入至少3个jar

你需要维护80行代码,而人家只需要维护1行代码。

那个comparator十行以内而已,哪有80行。。。

只不过是常用所以顺手写了一下.
没别的意思.
维护什么的不过是读的懂读不懂....
Collections.sort(list, new Comparator(){
     @Override 
    public int compare(Object o1, Object o2) { 
        IntString iso1 = (IntString)o1; 
        IntString iso2 = (IntString)o2; 
        String str1 = iso1.getStr(); 
        String str2 = iso2.getStr(); 
        return str1.compareTo(str2); 
    }
});
当str1为空时.....会报错....
所以对于这种空啊,非空啊,尽量使用
StringUtil
如果对于子属性什么的防御性编程
我认为太费神了...

尽量使用别人维护的代码 apache-common
可以节约精神去研究业务

+1

-1
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics