List集合对象中按照不同属性大小排序

package com.huad.luck;

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) {
		Person p = new Person();
		p.setName("tom");
		p.setAge(11);
		Person p1 = new Person();
		p1.setName("lilei");
		p1.setAge(19);
		Person p2 = new Person();
		p2.setName("json");
		p2.setAge(15);
		List<Person> list =new ArrayList<Person>();
		list.add(p);
		list.add(p1);
		list.add(p2);
		Collections.sort(list,new Comparator<Person>() {
			//这里可以再Person中实现 Comparator<T>接口,重写compare方法
			@Override
			public int compare(Person o1, Person o2) {
				//这里按照名字排序
				 return o1.getName().compareTo(o2.getName()); 
				 //这里按照age排序
				 //return (o1.getAge()+"").compareTo(o2.getAge()+""); 
				 //。。。根据不同属性值排序
			}   

		});
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i).getName());
		}
	}
}
//Person类
package com.huad.luck;

public class Person{
	private  String name ;
	private  int age;
	
	public Person(String name , int age) {
		this.name = name;
		this.age = age;
	}
	public Person( ) {
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

}


<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 8px; margin-bottom: 8px; line-height: 22.5px; letter-spacing: 0.5px; font-size: 12.5px; word-wrap: break-word; word-break: break-all; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋体;"><span style="padding: 0px; margin: 0px; letter-spacing: normal; font-stretch: normal; font-size: 14px; line-height: 24px; font-family: Tahoma; color: rgb(0, 0, 0);">用collection.sort()方法对list集合排序</span><br style="padding: 0px; margin: 0px;" /></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;"><span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"><span style="padding: 0px; margin: 0px; list-style: none outside none; line-height: 21px; word-wrap: break-word; word-break: normal;"></span></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 1em; margin-bottom: 0.5em; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;">第一种是list中的对象实现Comparable接口,如下:<span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"> </span></p><pre class="java" style="padding: 5px; margin-top: 0px; margin-bottom: 0px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); background: rgb(246, 246, 246);">/** 
* 根据order对User排序 
*/ 
public class User implements Comparable<User>{ 
    private String name; 
    private Integer order; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public Integer getOrder() { 
        return order; 
    } 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
    public int compareTo(User arg0) { 
        return this.getOrder().compareTo(arg0.getOrder()); 
    } 
}

 

测试一下: 

public class Test{
    public static void main(String[] args) { 
        User user1 = new User(); 
        user1.setName("a"); 
        user1.setOrder(1); 
        User user2 = new User(); 
        user2.setName("b"); 
        user2.setOrder(2); 
        List<User> list = new ArrayList<User>(); 
        //此处add user2再add user1 
        list.add(user2); 
        list.add(user1); 
        Collections.sort(list); 
        for(User u : list){ 
            System.out.println(u.getName()); 
        } 
    } 
}

 

输出结果如下 
a 
b 


第二种方法是根据Collections.sort重载方法来实现,例如: 

/** 
* 根据order对User排序 
*/ 
public class User { //此处无需实现Comparable接口 
    private String name; 
    private Integer order; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public Integer getOrder() { 
        return order; 
    } 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
}

 

主类中这样写即可: 

public class Test{ 
    public static void main(String[] args) { 
        User user1 = new User(); 
        user1.setName("a"); 
        user1.setOrder(1); 
        User user2 = new User(); 
        user2.setName("b"); 
        user2.setOrder(2); 
        List<User> list = new ArrayList<User>(); 
        list.add(user2); 
        list.add(user1); 
        
        Collections.sort(list,new Comparator<User>(){ 
            public int compare(User arg0, User arg1) { 
                return arg0.getOrder().compareTo(arg1.getOrder()); 
            } 
        }); 
        for(User u : list){ 
            System.out.println(u.getName()); 
        } 
    } 
}

 

输出结果如下 
a 
b 
前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Collections.sort(list, new  Comparator<User>(){ 
             public  int  compare(User arg0, User arg1) { 
//            第一次比较专业 
                 int  i = arg0.getOrder().compareTo(arg1.getOrder());
//            如果专业相同则进行第二次比较 
             if (i==<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值