導航:首頁 > 編程語言 > java對list對象排序

java對list對象排序

發布時間:2022-05-01 13:12:23

1. java怎麼對list進行排序

1,使用Comparator 介面

Student類 結構如下:(省略getter,setter方法)

public class Student {
/***
* 姓名
*/
private String name;
private int age;
private String address;
/***
* 考試得分
*/
private int score;

//省略getter,setter方法
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score
+ "]";
}

}

測試方法:

@Test
public void test_ListComparator(){
List<Student>students=new ArrayList<Student>();
Student stu=null;
stu=new Student();
stu.setName("whuang");
stu.setAge(12);
stu.setScore(80);
students.add(stu);

stu=new Student();
stu.setName("rong");
stu.setAge(11);
stu.setScore(90);
students.add(stu);

stu=new Student();
stu.setName("zhu");
stu.setAge(15);
stu.setScore(100);
students.add(stu);

Collections.sort(students,new SystemHWUtil. ListComparator(true,"age"));
System.out.println(students);

}

運行結果:

[Student [name=rong, age=11, score=90], Student [name=whuang, age=12, score=80], Student [name=zhu, age=15, score=100]]

核心類:

public static class ListComparator implements Comparator{
/***
* 是否轉化為Int之後再比較
*/
private boolean isConvertInteger;
/***
* 對哪個列進行排序
*/
private String comparedProperty;
public ListComparator(boolean isConvertInteger,String comparedProperty) {
super();
this.isConvertInteger = isConvertInteger;
this.comparedProperty=comparedProperty;
}
public int compare(Object o1, Object o2) {
if(null!=o1&&null!=o2)
{
try {
Object obj1=ReflectHWUtils.getObjectValue(o1, comparedProperty);
Object obj2=ReflectHWUtils.getObjectValue(o2, comparedProperty);
if(isConvertInteger){
int num1;
int num2;
if(obj1 instanceof Integer){
num1=(Integer)obj1;
num2=(Integer)obj2;
}else{
num1=Integer.parseInt(obj1.toString());
num2=Integer.parseInt(obj2.toString());
}
if(num1>num2){
return 1;
}else if(num1<num2){
return -1;
}else{
return 0;
}
}else{
return obj1.toString().compareTo(obj2.toString());
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return 0/*等於*/;
}
}

2,可以指定是升序還是降序

實例:

@Test
public void test_ListComparator(){
List<Student>students=new ArrayList<Student>();
Student stu=null;
stu=new Student();
stu.setName("whuang");
stu.setAge(12);
stu.setScore(80);
students.add(stu);

stu=new Student();
stu.setName("rong");
stu.setAge(11);
stu.setScore(90);
students.add(stu);

stu=new Student();
stu.setName("zhu");
stu.setAge(15);
stu.setScore(100);
students.add(stu);
SortList<Student> sortList = new SortList<Student>();
sortList.Sort(students, "getAge", "asc");
System.out.println(students);

}

注意:sortList.Sort 的第二個參數是方法名,不是成員變數名.

核心代碼

package com.common.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortList<E> {
public void Sort(List<E> list, final String method, final String sort) {
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sort != null && "desc".equals(sort))// 倒序
ret = m2.invoke(((E) b), null).toString()
.compareTo(m1.invoke(((E) a), null).toString());
else
// 正序
ret = m1.invoke(((E) a), null).toString()
.compareTo(m2.invoke(((E) b), null).toString());
} catch (NoSuchMethodException ne) {
System.out.println(ne);
} catch (IllegalAccessException ie) {
System.out.println(ie);
} catch (InvocationTargetException it) {
System.out.println(it);
}
return ret;
}
});
}
}

2. JAVA如何根據List中對象的屬性進行對象排序(江湖救急!)

最近這么多人問排序的問題啊,都快回答膩了,你可以先搜一搜看看別的網站有沒有,不過既然都回答了,我就估且再發些代碼吧,這里只用String的List排序,如果用到復雜的對象你自己懂得變通吧

publicclassSortList{
privatestaticDateFormatdf=newSimpleDateFormat("yyyy-MM-dd");

publicstaticvoidmain(String[]args){
List<String>dates=newArrayList<String>();
dates.add("2014-10-02");
dates.add("2013-12-01");
dates.add("2014-11-02");
dates.add("2014-01-05");

Collections.sort(dates,newComparator<String>(){
@Override
publicintcompare(Stringo1,Stringo2){
Dated1=null,d2=null;
try{
d1=df.parse(o1);
}catch(ParseExceptione){
e.printStackTrace();
}
try{
d2=df.parse(o2);
}catch(ParseExceptione){
e.printStackTrace();
}
if(null==d1||null==d2){
return0;
}
returnd1.compareTo(d2);
}
});
System.out.println(dates);
}

}

3. java的list集合如何根據對象中的某個欄位排序

下面的代碼是根據學生年齡排序學生list 的一個例子:

importjava.util.ArrayList;
importjava.util.List;

classStudent{

privateStringname;

privateintage;

publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

@Override
publicStringtoString(){
return"Perosn[name="+name+",age="+age+"]";
}
}

publicclassApp{

publicstaticvoidmain(String[]args){

List<Student>students=newArrayList<>();

students.add(newStudent("abc",12));
students.add(newStudent("bcd",20));
students.add(newStudent("cde",17));
students.add(newStudent("def",25));
students.add(newStudent("efg",15));

students.sort((x,y)->Integer.compare(x.getAge(),y.getAge()));

for(Studentstu:students){
System.out.println(stu);
}
}
}

運行結果:

4. java中兩個list集合如何排序

放到一個list中排zd序就專可以了
List<Article>
list
=
new
ArrayList<Article>();
list.addAll(list1);
list.addAll(list2);
然後2層循屬環就可以了

5. java 怎麼將List裡面數據排序

學生實體類,包含姓名和年齡屬性,

比較時先按姓名升序排序,如果姓名相同則按年齡升序排序。

6. java中對list 進行排序

map不可能存在相同的鍵,鍵是唯一的。

7. java List對象排序的問題……

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

public class TestTwo {
public static void main(String[] args) {
Navigation n = new Navigation();
List list = n.getNavigations();
Collections.sort(list,new TodoListComparator());
for (int i = 0; i < list.size(); i++) {
Navigation na = (Navigation)list.get(i);
System.out.println(na.getId());
}
}
}

class Navigation {
int id;
String name;
List navigations = new ArrayList();

public Navigation(int id,String name){
this.id = id;
this.name = name;
}

public Navigation(){
Navigation a1 = new Navigation(33,"張三");
Navigation a2 = new Navigation(11,"李四");
Navigation a3 = new Navigation(99,"王五");
Navigation a4 = new Navigation(24,"王五");
navigations.add(a1);
navigations.add(a2);
navigations.add(a3);
navigations.add(a4);
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

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

public List getNavigations() {
return navigations;
}

public void setNavigations(List navigations) {
this.navigations = navigations;
}

}

class TodoListComparator implements Comparator {
public int compare(Object obj1, Object obj2) {
Navigation m1 = (Navigation) obj1;
Navigation m2 = (Navigation) obj2;
int t1 = m1.getId();
int t2 = m2.getId();
if (t1 < t2){
return 1;
}else if (t1 > 2){
return -1;
}else {
return 0;
}
}
}

8. java中list排序

第一種方法,就是list中對象實現Comparable介面,代碼如下:

public class Person implements Comparable<Person> {
private String name;
private Integer order;

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the order
*/
public Integer getOrder() {
return order;
}

/**
* @param order
* the order to set
*/
public void setOrder(Integer order) {
this.order = order;
}

@Override
public int compareTo(Person arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}

}

public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.setName("name1");
p1.setOrder(1);
p2.setName("name2");
p2.setOrder(2);
p3.setName("name3");
p3.setOrder(3);

listA.add(p2);
listA.add(p1);
listA.add(p3);
Collections.sort(listA);
for (Person p : listA) {
System.out.println(p.getName());
}
}

第二種方法,就是在重載Collections.sort方法,代碼如下:

public class Person {
private String name;
private Integer order;

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the order
*/
public Integer getOrder() {
return order;
}

/**
* @param order
* the order to set
*/
public void setOrder(Integer order) {
this.order = order;
}

}

public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.setName("name1");
p1.setOrder(1);
p2.setName("name2");
p2.setOrder(2);
p3.setName("name3");
p3.setOrder(3);

listA.add(p2);
listA.add(p1);
listA.add(p3);

Collections.sort(listA, new Comparator<Person>() {
public int compare(Person arg0, Person arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});

for (Person p : listA) {
System.out.println(p.getName());
}
}

兩次執行的結果都是:

name1

name2

name3

9. 如何對 List 排序

Collections對List集合中的數據進行排序

有時候需要對集合中的元素按照一定的規則進行排序,這就需要用到

Java中提供的對集合進行操作的工具類Collections,其中的sort方法

先看一個簡單的例子:

public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
nums.add(3);
nums.add(5);
nums.add(1);
nums.add(0);
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
}
輸出結果:
[3, 5, 1, 0]
[0, 1, 3, 5]
稍微復雜的List裡面放一個復雜的對象

package core.java.collection.collections;

public class User implements Comparable<User>{

private int score;

private int age;

public User(int score, int age){
super();
this.score = score;
this.age = age;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

public int getAge() {
return age;
}

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

@Override
public int compareTo(User o) {
int i = this.getAge() - o.getAge();//先按照年齡排序
if(i == 0){
return this.score - o.getScore();//如果年齡相等了再用分數進行排序
}
return i;
}

}

public static void main(String[] args) {
List<User> users = new ArrayList<User>();
users.add(new User(78, 26));
users.add(new User(67, 23));
users.add(new User(34, 56));
users.add(new User(55, 23));
Collections.sort(users);
for(User user : users){
System.out.println(user.getScore() + "," + user.getAge());
}
}
輸出結果:
55,23
67,23
78,26
34,56
我們會發現sort(List<T>)方法中List中的T必須實現Comparable<T>介面,然後實現
compareTo()方法,該方法的返回值0代表相等,1表示大於,-1表示小於;為什麼
在簡單例子中沒有看到實現Comparable介面呢?是因為Integer類其實自己已經實現
了Comparable介面,Java已經給我們做好了。

Collections提供的第二種排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:

package core.java.collection.collections;

public class Students {

private int age;
private int score;

public Students(int age, int score){
super();
this.age = age;
this.score = score;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Students> students = new ArrayList<Students>();
students.add(new Students(23, 100));
students.add(new Students(27, 98));
students.add(new Students(29, 99));
students.add(new Students(29, 98));
students.add(new Students(22, 89));
Collections.sort(students, new Comparator<Students>() {

@Override
public int compare(Students o1, Students o2) {
int i = o1.getScore() - o2.getScore();
if(i == 0){
return o1.getAge() - o2.getAge();
}
return i;
}
});
for(Students stu : students){
System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
}
}
輸出結果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

從上面的例子我們可以看出Students類沒有實現Comparable<T>介面,只是在sort()方法
中多傳入一個參數,只不過該參數是一個介面我們需要實現其compare方法。

以上就是是Java中Colelctions工具類為我們提供的兩種集合排序方法。

閱讀全文

與java對list對象排序相關的資料

熱點內容
cnc編程前景怎麼樣 瀏覽:319
lniux命令詳解 瀏覽:493
linuxmysql查詢日誌 瀏覽:368
老捷達夥伴壓縮比 瀏覽:93
改後綴加密 瀏覽:432
郵局選址問題演算法 瀏覽:14
河北伺服器內存雲主機 瀏覽:12
在電腦上怎麼找到加密狗圖標 瀏覽:435
電腦的瀏覽器怎麼打開pdf文件怎麼打開 瀏覽:142
pdf卡片庫下載 瀏覽:11
單片機中二進製表示什麼 瀏覽:725
java網路編程推薦 瀏覽:794
施耐德開關編程 瀏覽:66
組織胚胎學pdf 瀏覽:844
linux查看發包 瀏覽:496
加密貨幣交易所暴利時代 瀏覽:824
歌詞滾動效果android 瀏覽:14
程序員一天的六場戰斗 瀏覽:797
自製壓縮泵的做法 瀏覽:622
androidstring變數 瀏覽:247