Comparator.comparing在java 8流中没有Method引用时无法正常工作

时间:2018-01-27 04:07:14

标签: java java-8 stream comparator

List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal::getName)).collect(Collectors.toList());

//working 

List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal.getName()).collect(Collectors.toList());

//Not working..

任何人都可以告诉我为什么我不能在没有方法参考的情况下使用比较器比较?

2 个答案:

答案 0 :(得分:6)

Comparator#comparing

  

接受从类型T中提取可比较排序键 的函数,   并返回一个按该排序键进行比较的比较器。

Animal::getName给出方法参考,而Animal.getName()给你一个String(可能)。

参考:

:: (double colon) operator in Java 8

答案 1 :(得分:2)

除非getName()是静态方法,否则可能无法编译。

如果您不想使用方法引用(它不是合成糖),请使用lambda,这也应该有用。

animals.stream().sorted(Comparator.comparing(a -> a.getName()).collect(Collectors.toList());