Method reference to an instance method

Let's assume that we are defining the following Comparator for Melon:

public class MelonComparator implements Comparator {

@Override
public int compare(Object m1, Object m2) {
return Integer.compare(((Melon) m1).getWeight(),
((Melon) m2).getWeight());
}
}

Now, we can refer to it as follows:

  • No method reference:
MelonComparator mc = new MelonComparator();

List<Melon> sorted = melons.stream()
.sorted((Melon m1, Melon m2) -> mc.compare(m1, m2))
.collect(Collectors.toList());
  • Method reference:
List<Melon> sorted = melons.stream()
.sorted(mc::compare)
.collect(Collectors.toList());

Of course, we can call Integer.compare() directly as well:

  • No method reference:
List<Integer> sorted = melons.stream()
.map(m -> m.getWeight())
.sorted((m1, m2) -> Integer.compare(m1, m2))
.collect(Collectors.toList());
  • Method reference:
List<Integer> sorted = melons.stream()
.map(m -> m.getWeight())
.sorted(Integer::compare)
.collect(Collectors.toList());
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset