public class Car {
private int maxSpeed;
public Car(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
public int getMaxSpeed() {
return maxSpeed;
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以按以下方式对汽车列表进行排序
Car carX = new Car(155);
Car carY = new Car(140);
List<Car> cars = new ArrayList<>();
cars.add(carX);
cars.add(carY);
cars.sort(Comparator.comparing(Car::getMaxSpeed));
Run Code Online (Sandbox Code Playgroud)
如果我们看到方法的签名Comparator.comparing,则输入参数类型为Function<? super T, ? extends U>
在上面的例子中,是如何Car::getMaxSpeed被转换为Function<? super T, ? extends U>而以下不编译?
Run Code Online (Sandbox Code Playgroud)Function<Void, Integer> function = Car::getMaxSpeed;
public interface MyFunc<T> {
boolean func(T v1, T v2);
}
Run Code Online (Sandbox Code Playgroud)
public class HighTemp {
private int hTemp;
HighTemp(){
}
public HighTemp(int ht) {
this.hTemp = ht;
}
boolean sameTemp(HighTemp ht2){
return hTemp == ht2.hTemp;
}
boolean lessThanTemp(HighTemp ht2){
return hTemp < ht2.hTemp;
}
}
Run Code Online (Sandbox Code Playgroud)
class InstMethWithObjRef {
static <T> int counter(T[] vals, MyFunc<T> f, T v){
int count = 0;
for (int i = 0; i < vals.length; i++) {
if(f.func(vals[i], v)) count++;
}
return count;
}
public static void …Run Code Online (Sandbox Code Playgroud)