Replace Lambdas with method reference.

978 views Asked by At

Please help me to understand how to replace lambdas with method reference for the method below.

    public List<Person> sortByStartDate_ASC(LinkedHashSet<Person> personList) {

        List<Person> pList = new ArrayList<Person>(personList);

        Collections.sort(pList, (Person person1, Person person2) -> person1
            .getStartDate().compareTo(person2.getStartDate()));
        return pList;
    }
2

There are 2 answers

0
assylias On BEST ANSWER

The equivalent method reference would be comparing(Person::getStartDate) - note that in your specific case you could sort the stream directly. Also there is no point restricting your method to only accept LinkedHashSets - any collection would do:

public List<Person> sortByStartDate_ASC(Collection<Person> personList) {
  return personList.stream()
                   .sorted(comparing(Person::getStartDate))
                   .collect(toList());
}

Note required static imports:

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;
0
Tagir Valeev On

Use Comparator.comparing helper method:

Collections.sort(pList, Comparator.comparing(Person::getStartDate));