phoenix
phoenix

Reputation: 717

How to sort a list of class objects on one of its fields using Lambda Expressions?

I was writing a code to validate states of my object. The code I wrote sorts the input list of objects and then does a range check.

private boolean validateStates(List<ConcessionState> concessionStateList) {
    long startRange,endRange = 0;
    Collections.sort(concessionStateList , new Comparator<ConcessionState>() {
        @Override
        public int compare(ConcessionState o1, ConcessionState o2) {
            return (int)(long)(o1.getRangeStart() - o2.getRangeStart());
        }
........
}

Is there a way to write this sort using Lambda expressions?

Upvotes: 1

Views: 326

Answers (1)

aioobe
aioobe

Reputation: 421040

You use Comparator.comparing(Function<? super T,? extends U> keyExtractor).

As follows:

private boolean validateStates(List<ConcessionState> concessionStateList) {
    long startRange,endRange = 0;
    Collections.sort(concessionStateList,
                     Comparator.comparing(ConcessionState::getRangeStart));
    .......
}

If you want it in descending order, you do

    Comparator.comparing(ConcessionState::getRangeStart)
              .reversed()

Upvotes: 4

Related Questions