Reverse a comparator in Java 8

后端 未结 4 730
轻奢々
轻奢々 2020-11-28 08:43

I have an ArrayList and want sort it in descending order. I use for it java.util.stream.Stream.sorted(Comparator) method. Here is a description according Java A

相关标签:
4条回答
  • 2020-11-28 08:51

    You can also use Comparator.comparing(Function, Comparator)
    It is convenient to chain comparators when necessary, e.g.:

    Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
            .thenComparingInt(SomeEntity::getProperty2)
            .thenComparing(SomeEntity::getProperty3, reverseOrder());
    
    0 讨论(0)
  • 2020-11-28 08:53

    Java 8 Comparator interface has a reversed method : https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--

    0 讨论(0)
  • 2020-11-28 08:55

    Why not to extend the existing comperator and overwrite super and nor the result. The implementation the Comperator Interface is not nessesery but it makes it more clear what happens.

    In result you get a easy reusable Class File, testable unit step and clear javadoc.

    public class NorCoperator extends ExistingComperator implements Comparator<MyClass> {
        @Override
        public int compare(MyClass a, MyClass b) throws Exception {
            return super.compare(a, b)*-1;
        }
    }
    
    0 讨论(0)
  • 2020-11-28 09:02

    You can use Comparator.reverseOrder() to have a comparator giving the reverse of the natural ordering.

    If you want to reverse the ordering of an existing comparator, you can use Comparator.reversed().

    Sample code:

    Stream.of(1, 4, 2, 5)
        .sorted(Comparator.reverseOrder()); 
        // stream is now [5, 4, 2, 1]
    
    Stream.of("foo", "test", "a")
        .sorted(Comparator.comparingInt(String::length).reversed()); 
        // stream is now [test, foo, a], sorted by descending length
    
    0 讨论(0)
提交回复
热议问题