本文目錄一覽:
集合List根據多個欄位進行排序
最近用java抓取數據的時候,遇到了需要對拿到的List集合按照多個欄位進行排序。首先得讓排序的實體類實現Comparable類並且重寫它的compareTo方法,在compareTo中你可以自定義排序的規則。如果前者大於後者,則返回1,若果相等則返回0,若果前者小於後者,則返回-1;String字元串比較的時候也會經常用到這個compareTo方法,查看String類,可以看到它也實現了Comparable類。
String類
新建一個User類:按照id升序,age降序來排序。
再建一個Junit測試類
排序結果
java 中 List 怎麼排序呢
MapString, String map =new HashMapString, String();
java.util.ListString list=new ArrayListString();
map.put(“a”, “a”);
map.put(“c”, “c”);
map.put(“b”, “b”);
list.addAll(map.keySet());
Collections.sort(list);
for (String key : list)
{
System.out.println(map.get(key));
}
直接Copy 到main方法中運行, 是個降序! 升序的話 Collections 這裡面也有的。
樓主 太摳門, 5分都不給!
JAVA中list集合的排序
根據字元串的含義,進行對象化,比如,Student,有三個屬性,序號,姓名,分數
注意重寫Student的Compareable介面
然後,ListString變成ListStudent students=new ArrayListStudent
然後,遍歷list,算出平均分,放入新的SortListStudent
列印結果
java中list排序
第一種方法,就是list中對象實現Comparable介面,代碼如下:
public class Person implements ComparablePerson {
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) {
ListPerson listA = new ArrayListPerson();
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) {
ListPerson listA = new ArrayListPerson();
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 ComparatorPerson() {
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
JAVA中list排序問題
compareTo
只是比較2個字元串,不能進行排序
String
s1
=
“abc”;
String
s2
=
“abcd”;
String
s3
=
“abcdfg”;
String
s4
=
“1bcdfg”;
String
s5
=
“cdfg”;
String
s6=”abc”;
System.out.println(
s1.compareTo(s2)
);
//
-1
(前面相等,s1長度小1)
System.out.println(
s1.compareTo(s3)
);
//
-3
(前面相等,s1長度小3)
System.out.println(
s1.compareTo(s4)
);
//
48
(“a”的ASCII碼是97,”1″的的ASCII碼是49,所以返回48)
System.out.println(
s1.compareTo(s5)
);
//-2
System.out.println(
s1.compareTo(s6)
);
//
比較方法其實就是對字元串中的字元逐個比較ASCII
值相減,如果2個字元串是包含關係返回長度差。Collections.sort方法才是對LIST
進行排序的方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/201055.html