1. 程式人生 > >如何對List集合中的物件進行按某個屬性排序

如何對List集合中的物件進行按某個屬性排序

我們在實際的開發工作中,經常會碰到排序的問題,如題,我們如何針對List集合中的某一個屬性進行排序

先舉一個簡單的例子:

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class Demo {

	
	
	public static void main(String[] args) {
		
		
		List<String> list1 = new ArrayList<>();
		list1.add("3");
		list1.add("4");
		list1.add("1");
		list1.add("2");
		System.out.println("排序前--:"+list1.toString());
		Collections.sort(list1);
		System.out.println("排序前後--:"+list1.toString());
		

	}
}

列印控制檯資訊:


排序的結果很理想

額  可是我們碰到的情況大部分都不會這麼簡單,哪會有這麼弱智的情況還讓排序的

我們這樣


編譯不通過,原因


意思就是這個TestA類得繼承Comparable,那為什麼String可以直接比較呢,看一下String的原始碼發現:


String類也是實現了Comparable介面,

所以,可以這樣做:

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class Demo {

	
	
	public static void main(String[] args) {
		
		TestA testA1 = new TestA("老張", 3);
		TestA testA2 = new TestA("老李", 1);
		TestA testA3 = new TestA("老王", 2);
		List<TestA> list  = new ArrayList<>();
		list.add(testA1);
		list.add(testA2);
		list.add(testA3);
		System.out.println("排序前--:"+list.toString());
		Collections.sort(list, new Comparator<TestA>() {
            @Override
            public int compare(TestA o1, TestA o2) {
                //升序
                return o1.getAge().compareTo(o2.getAge());
            }
        });
		System.out.println("升序排序後--:"+list.toString());
		
		Collections.sort(list, new Comparator<TestA>() {
            @Override
            public int compare(TestA o1, TestA o2) {
                //升序
                return o2.getAge().compareTo(o1.getAge());
            }
        });
		System.out.println("降序排序後--:"+list.toString());
		
	}
	
}
結果:

我們還可以用TestA類實現Comparable介面重寫compareTo

package test;

public class TestA implements Comparable<TestA>{
	private String name;
	
	private Integer age;

	public TestA(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "TestA [name=" + name + ", age=" + age + "]";
	}

	@Override
	public int compareTo(TestA o) {
		return this.age.compareTo(o.getAge());
	}
	
	
}

結果:


over;

本文大部分參考網上資源,用於筆記心得記錄,侵刪