java - 按降序对特定成员/状态的对象列表进行排序

标签 java list sorting comparator

我有一个包含 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/

相关文章:

java - 在 Eclipse (Java) 中使用 Unicode 符号的奇怪打印行为

java - 比较排序算法

Python如何使用浮点值对列表进行排序

php - 根据单独数组的顺序对数组进行排序

java - 线性链表,前置节点

java - 在java中拆分可视文本 block

Java 8 的 orElse 没有按预期工作

java - Java 中的 URL 转义

c++ - 为什么在实现链接列表时 "delete at head"不能正常工作?

list - <*> 对于以 do 表示法实现的列表 - 这不是 "cheating"吗?