简体   繁体   中英

How to sort a list of objects with some specific property

I have a record object

 public Record{
   double simiADD;
 }

I Have a List of Record objects and I want to Sort on simiADD. Record with less value of simiADD should occur first and record with more value of simiADD should occur later in the sorted list. I wanted to do this operation in a seprate method and not implementing the comparator in Record class.

If you don't want to define a comparison function inside the Record class:

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

I assume that you meant that you don't want to implement "Comparable" interface in your class. Use Comparator and Collection's sort static method:

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);
    }
}

Here's a code example

public class Record implements Comparable<Record> {
    public double simiADD;

    public int compareTo(Record r) {
        return Double.compare(this.simiADD, r.simiADD);
    }
}

Then simply using any sort method will use the overridden compareTo for the Record class.

Read the JavaDoc for the Comparable interface. http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html . Or did you mean "don't want to implement Comparable" instead of "Comparator"?

Comparable is quite standard actually, which is good for the maintenance of your code. The sort method in Collections is based on it, so it works pretty well.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM