java - What are the tradeoffs for different approaches when creating a comparator? -


suppose have record class string name (could other type) attribute. in class have method order(list<record>) needs sort list name. this, want create custom stateless comparator. have seen 3 options commonly used:

  1. static comparator

    private static final comparator<record> static_comparator = new staticcomparator(); private static class staticcomparator implements comparator<record> {     @override     public int compare(record m1, record m2) {         return m1.getname().compareto(m2.getname());     } }  void order(list<record> records) {     records.sort(static_comparator); } 
  2. singleton comparator

    private static enum singletoncomparator implements comparator<record> {     instance;      @override     public int compare(record m1, record m2) {         return m1.getname().compareto(m2.getname());     } }  void order(list<record> records) {     records.sort(singletoncomparator.instance); } 
  3. use comparator.comparing()

    void order(list<record> records) {     records.sort(comparator.comparing(record::getname)); } 

assuming order() gets called lot, tradeoffs each approach? how compare on matters such serialization, thread safety, , performance?


Popular posts from this blog