我有一个包含 4 个成员的 java 对象列表。
int id;
String name;
String age;
int order;
我正在使用他的代码根据 if 条件按升序对对象字段进行排序。
Collections.sort(list, new Comparator<com.MyObject>() {
public int compare(com.MyObject object1, com.MyObject object2) {
if(myString.equalsIgnoreCase("name")){
return object1.getName().compareTo(object2.getName());
}else if(myString.equalsIgnoreCase("age")){
return object1.getAge().compareTo(object2.getAge());
}else{
return object1.getOrder() - object2.getOrder();
}
}
});
我想添加另一个条件if(myString.equalsIgnoreCase("nameReverse"))
如果是这种情况,列表应按降序排序。
最佳答案
Collections class有一个 reverseOrder
方法,它返回给定比较器的反向Comparator
。 IMO,如果您只想获得反向Comparator
,那么不修改Comparator
会更干净。
一些示例代码:
public class Person {
public static void testComparator() {
Person p1 = new Person("c");
Person p2 = new Person("a");
Person p3 = new Person("b");
List<Person> persons = Arrays.asList(p1, p2, p3);
Collections.sort(persons, PersonComparator.INSTANCE);
System.out.println("After normal sorting: " + persons);
Collections.sort(persons, Collections.reverseOrder(PersonComparator.INSTANCE));
System.out.println("After reverse sorting: " + persons);
}
public Person(String name) { this.name = name; }
public String name;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Person [name=").append(name).append("]");
return builder.toString();
}
}
class PersonComparator implements Comparator<Person> {
public static final PersonComparator INSTANCE = new PersonComparator();
@Override
public int compare(Person o1, Person o2) {
return o1.name.compareTo(o2.name);
}
}
关于java - 按降序对特定成员/状态的对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104891/