我试图按对象内的特定值对对象的数组列表进行排序。什么是做这种事情的最佳方法。我应该将Collections.sort()与某种比较器一起使用吗?
我试图用一个变量中包含的浮点值对对象列表进行排序。
编辑:这是我到目前为止:
public class CustomComparator implements Comparator<Marker> { @Override public int compare(Mark o1, Mark o2) { return o1.getDistance().compareTo(o2.getDistance()); } }
错误状态:无法在原始类型double上调用compareTo(double)。
是因为比较器不能返回某种类型以外的任何东西吗?
如果你要查找默认排序,则应使用Comparable而不是Comparator。
看到这里,这可能会有帮助- 类何时应该是Comparable和/或Comparator?
Comparator
尝试这个
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestSort { public static void main(String args[]){ ToSort toSort1 = new ToSort(new Float(3), "3"); ToSort toSort2 = new ToSort(new Float(6), "6"); ToSort toSort3 = new ToSort(new Float(9), "9"); ToSort toSort4 = new ToSort(new Float(1), "1"); ToSort toSort5 = new ToSort(new Float(5), "5"); ToSort toSort6 = new ToSort(new Float(0), "0"); ToSort toSort7 = new ToSort(new Float(3), "3"); ToSort toSort8 = new ToSort(new Float(-3), "-3"); List<ToSort> sortList = new ArrayList<ToSort>(); sortList.add(toSort1); sortList.add(toSort2); sortList.add(toSort3); sortList.add(toSort4); sortList.add(toSort5); sortList.add(toSort6); sortList.add(toSort7); sortList.add(toSort8); Collections.sort(sortList); for(ToSort toSort : sortList){ System.out.println(toSort.toString()); } } } public class ToSort implements Comparable<ToSort> { private Float val; private String id; public ToSort(Float val, String id){ this.val = val; this.id = id; } @Override public int compareTo(ToSort f) { if (val.floatValue() > f.val.floatValue()) { return 1; } else if (val.floatValue() < f.val.floatValue()) { return -1; } else { return 0; } } @Override public String toString(){ return this.id; } }
按照此代码对任何ArrayList进行排序
Collections.sort(myList, new Comparator<EmployeeClass>(){ public int compare(EmployeeClass obj1, EmployeeClass obj2) { // ## Ascending order return obj1.firstName.compareToIgnoreCase(obj2.firstName); // To compare string values // return Integer.valueOf(obj1.empId).compareTo(Integer.valueOf(obj2.empId)); // To compare integer values // ## Descending order // return obj2.firstName.compareToIgnoreCase(obj1.firstName); // To compare string values // return Integer.valueOf(obj2.empId).compareTo(Integer.valueOf(obj1.empId)); // To compare integer values } });