【问题标题】:How to sort a list of objects with some specific property如何对具有某些特定属性的对象列表进行排序
【发布时间】:2011-07-24 08:20:20
【问题描述】:

我有一个记录对象

 public Record{
   double simiADD;
 }

我有一个记录对象列表,我想在 simiADD 上排序。 simiADD 值较小的记录应该首先出现,simiADD 值较大的记录应该出现在排序列表的后面。我想在单独的方法中执行此操作,而不是在 Record 类中实现比较器。

【问题讨论】:

    标签: java


    【解决方案1】:

    如果不想在 Record 类中定义比较函数:

    Collections.sort(recordList, new Comparator<Record>() {
            public int compare(Record object1, Record object2) {
                return Double.compare(object1.simiADD, object2.simiADD);
            }
        }
    );
    

    【讨论】:

      【解决方案2】:

      我假设你的意思是你不想在你的类中实现“Comparable”接口。使用 Comparator 和 Collection 的 sort 静态方法:

      import java.util.*;
      public class EmpSort {
          static final Comparator<Employee> SENIORITY_ORDER =
                                       new Comparator<Employee>() {
              public int compare(Employee e1, Employee e2) {
                  return e2.hireDate().compareTo(e1.hireDate());
              }
          };
      
          // Employee database
          static final Collection<Employee> employees = ... ;
      
          public static void main(String[] args) {
              List<Employee>e = new ArrayList<Employee>(employees);
              Collections.sort(e, SENIORITY_ORDER);
              System.out.println(e);
          }
      }
      

      【讨论】:

        【解决方案3】:

        这是一个代码示例

        public class Record implements Comparable<Record> {
            public double simiADD;
        
            public int compareTo(Record r) {
                return Double.compare(this.simiADD, r.simiADD);
            }
        }
        

        然后简单地使用任何排序方法将使用重写的 compareTo Record 类。

        【讨论】:

          【解决方案4】:

          阅读 Comparable 接口的 JavaDoc。 http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html。还是您的意思是“不想实现 Comparable”而不是“Comparator”?

          Comparable 实际上是相当标准的,这有利于代码的维护。 Collections中的排序方法就是基于它,所以效果很好。

          【讨论】:

            猜你喜欢
            • 2011-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-04
            • 2022-01-26
            • 2022-01-11
            • 2022-01-05
            相关资源
            最近更新 更多