List 中的对象如何根据某个字段进行排序?急!
我有一个ArrayList,里面放的是一些对象,我根据对象的某个字段对ArrayList中的对象进行排序,但是不知道怎么做?请知道的帮一下,谢谢!
[解决办法]
List arr = new ArrayList();
arr.add("哈哈");
arr.add("2");
arr.add("1");
arr.add("5");
arr.add("3");
arr.add("4");
Object[] temp = arr.toArray();
Arrays.sort(temp);
arr = (List) Arrays.asList(temp);
System.out.println(arr);
[解决办法]
- Java code
List list = new ArrayList(); //...... Collections.sort(list, new MyComparator()); class MyComparator implements Comparator { //这里的o1和o2就是list里任意的两个对象,然后按需求把这个方法填完整就行了 public int compare(Object o1, Object o2) { //比较规则 } }
[解决办法]
[解决办法]
[解决办法]
重写public int compare(Object o1, Object o2)这个方法.
[解决办法]
[解决办法]
5楼说的对~~~~~~~~~~~~~~~~~~~~~~~
[解决办法]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test1 {
private String a;
private String b;
public Test1() {
}
public Test1(String a, String b) {
this.a = a;
this.b = b;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
private List mySort(List arr) { // 交换排序->冒泡排序
Test1 temp = null;
boolean exchange = false;
for (int i = 0; i < arr.size(); i++) {
exchange = false;
for (int j = arr.size() - 2; j >= i; j--) {
if (((Test1) arr.get(j + 1)).getA().compareTo(
((Test1) arr.get(j)).getA()) >= 0) {
temp = (Test1) arr.get(j + 1);
arr.set(j + 1, (Test1) arr.get(j));
arr.set(j, temp);
exchange = true;
}
}
if (!exchange)
break;
}
return arr;
}
public static void main(String[] args) {
List arr = new ArrayList();
Test1 test = new Test1("1", "dssags");
arr.add(test);
test = new Test1("3", "dssags");
arr.add(test);
test = new Test1("2", "dssags");
arr.add(test);
test = new Test1("5", "dssags");
arr.add(test);
test = new Test1("4", "dssags");
arr.add(test);
test = new Test1("6", "dssags");
arr.add(test);
Test1 operation = new Test1();
arr = operation.mySort(arr);
for (int i = 0; i < arr.size(); i++) {
System.out.println(((Test1) arr.get(i)).getA());
}
}
}
[解决办法]
根据boolean咋排哦,就两个值
[解决办法]
[解决办法]
假设要对类Test按照字段num排序
如下例:
- Java code
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;class Test implements Comparator { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int compare(Object o1, Object o2) { if (((Test) o1).getNum() > ((Test) o2).getNum()) return 1; return 0; }}class TestExecute { public static void printList(List<Test> list) { for (Test test : list) System.out.print(test.getNum()+" "); } @SuppressWarnings("unchecked") public static void main(String[] args) { List<Test> list = new ArrayList<Test>(); for (int i = 10; i > 0; --i) { Test test = new Test(); test.setNum(i); list.add(test); } System.out.println("排序前:"); printList(list); Collections.sort(list, new Test()); System.out.println("\n排序后:"); printList(list); }}
[解决办法]
Collections.sort(list,new Comparator(){
public int compare(Object o1, Object o2) {
if((o1 instanceof MyClass) && (o2 instanceof MyClass)){
return ((MyClass)o1).isOK > ((MyClass)o2).isOK);
}
}
});
[解决办法]
[解决办法]
[解决办法]
如果没有第二排序关键字,同样的是 true 的话就是按照原来的顺序排列,原先在前排序后也是在前的。
[解决办法]
- Java code
1:/** * 比较器 Collections.sort(list, myCompatator); * * @param aone */class MyComparator implements Comparator { public int compare(Object arg0, Object arg1) { YouType cop1 = (YouType) arg0; YouType cop2 = (YouType) arg1; int flag = cop1.getOrderId().compareTo(cop2.getOrderId()); return flag; }}2:MyComparator myCompatator = new MyComparator();Collections.sort(docsU, myCompatator);// 排序
[解决办法]
ArrayList 是有序的 使用范型 ArrayList<Object> list = new ArrayList<Object>();
然后 Object implements Comparator 接口 实现里面的 compareTo 方法
那么 ArrayList在排序时会自动掉用 上面你实现的compareTo方法进行排序的
[解决办法]
- Java code
List<ShushanRelationInfoPOJO> list = new ArrayList<ShushanRelationInfoPOJO>(); //.............. Collections.sort(list, new Comparator<ShushanRelationInfoPOJO>() { public int compare(ShushanRelationInfoPOJO o1, ShushanRelationInfoPOJO o2) { boolean onLine1 = o1.isOnline(); boolean onLine2 = o2.isOnline(); if(onLine1 ^ onLine2) { return onLine1? -1: 1; } else { return 0; } } });