How do I make 2 comparable methods in only one class?

前端 未结 3 1684
借酒劲吻你
借酒劲吻你 2020-11-29 01:21

I\'ve got one class, that I sort it already by one attribute. Now I need to make another thing, that I need to create another way to sort my data. How can I make it, so I ca

相关标签:
3条回答
  • 2020-11-29 02:07

    If the two methods require the exact same footprint, you may be inappropriately overloading a single class with multiple uses, which would be resolved by fixing your class hierarchy - like instead of using "shape", subclass it with "oval", "rectangle", etc.

    If subclassing doesn't make sense, you need to create different comparison classes. In Java, you often use a Comparator for comparisons. Create several (or create a configurable comparator): IsbnComparator, AuthorComparator, etc.

    Oh, and the configurable option would be:

     BookComparator implements Compartor {
       enum FIELD { AUTHOR, ISBN, ... };
       setSortOrder(int rank, FIELD field){...}
     }
    
    0 讨论(0)
  • 2020-11-29 02:16

    What you need to do is implement a custom Comparator. And then use:

    Collections.sort(yourList, new CustomComparator<YourClass>());
    

    Specifically, you could write: (This will create an Anonymous class that implements Comparator.)

    Collections.sort(yourList, new Comparator<YourClass>(){
        public int compare(YourClass one, YourClass two) {
            // compare using whichever properties of ListType you need
        }
    });
    

    You could build these into your class if you like:

    class YourClass {
    
        static Comparator<YourClass> getAttribute1Comparator() {
            return new Comparator<YourClass>() {
                // compare using attribute 1
            };
        }
    
        static Comparator<YourClass> getAttribute2Comparator() {
            return new Comparator<YourClass>() {
                // compare using attribute 2
            };
        }
    }
    

    It could be used like so:

    Collections.sort(yourList, YourClass.getAttribute2Comparator());
    
    0 讨论(0)
  • 2020-11-29 02:16

    You can only have one compareTo() method in your class.

    If you want to sort the same class more than one way, create Comparator implementations.

    0 讨论(0)
提交回复
热议问题