相关疑难解决方法(0)

Java 8中的方法参考

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>而以下不编译?

  Function<Void, Integer> function = Car::getMaxSpeed;
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

13
推荐指数
2
解决办法
3186
查看次数

请使用类名解释Java 8方法参考实例方法

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)

java java-8 functional-interface method-reference

8
推荐指数
1
解决办法
2932
查看次数