【问题标题】:Sorting a list of objects in java [duplicate]在java中对对象列表进行排序[重复]
【发布时间】:2014-12-26 01:00:57
【问题描述】:

我想根据marks 字段按升序对这个Emp 对象列表进行排序。

List<Emp> emp= new ArrayList<Emp>();

public class Emp implements Serializable {
    private String empname;
    private String section;
    private int empId;
    private int marks;
    ...

【问题讨论】:

标签: java collections


【解决方案1】:

你需要写一个比较器,否则Sort方法会假设你在排序时要使用哪些字段。

 Collections.sort(emp, new Comparator<Emp>() { public int compare(Emp one, Emp two) {
       return one.marks.compareTo(two.marks);
  });

在我的示例中,我将字段标记视为公共,如果您愿意,请将 one.marks 替换为 getter。

此外,由于您使用的整数没有 compareTo,因此请这样做:

     Collections.sort(list, new Comparator<Emp>() {
       public int compare(Emp one, Emp two) {
           int cmp = one.getMarks() > two.getMarks() ? +1 : one.getMarks() < two.getMarks() ? -1 : 0;
           return cmp;
       }
   });

【讨论】:

    【解决方案2】:

    您可以使用比较器对象进行排序。

    Collections.sort();
    

    进行排序。

    这将适用于您的列表。要使用的方法是 compareTo。

        if (list.size() > 0) {
        Collections.sort(list, new Comparator<Emp>() {
            @Override
            public int compare(final Emp object1, final Emp object2) {
                return object1.getMarks().compareTo(object2.getMarks());
            }
           } );
       }
    

    【讨论】:

      【解决方案3】:

      Java 中支持对象比较的主要方式有两种。

      您可以让您的类实现Comparable 接口,当您的对象具有您所依赖的自然顺序(例如,字符串的字母顺序)时,这是可以接受的。这需要类实现一个compareTo 方法,该方法定义了实例之间的比较规则。

      标准替代方法是为您的类实例化 Comparator,并在 compare 方法中指定比较规则。

      在您的情况下,后一种选择似乎更合适。 compare 方法的机制相当简单:它需要您的类的两个实例,如果第一个“小于”第二个则返回负值,如果“大于”则返回正数,如果它们是则返回 0 “平等的”。对于基于整数的比较,例如通过marks 进行比较,快速技巧是返回数字的差。

      一旦定义了Comparator,排序就像调用Collections.sort 方法一样简单,选择采用List 和指定Comparator 的方法签名。

      List<Emp> emps = new ArrayList<Emp>();
      // populate list...
      
      Comparator<Emp> empComparator = new Comparator<Emp>() {
          public int compare(Emp e1, Emp e2) {
              return e2.getMarks() - e2.getMarks();
          }
      };
      
      Collections.sort(emps, empComparator);
      

      【讨论】:

        猜你喜欢
        • 2018-10-20
        • 1970-01-01
        • 2018-05-12
        • 2016-10-14
        • 2016-03-21
        • 1970-01-01
        • 2011-07-07
        • 2010-10-26
        • 2012-10-14
        相关资源
        最近更新 更多