collection.add(()-> 7)中()->的功能是什么?

时间:2019-09-30 11:05:09

标签: java lambda

我知道今天这将是关于Stackoverflow的la脚问题...但是我仍然想在Java中找到以下代码段的功能

理想情况下,我们应该将一个'Scoreable scoreable'对象传递给collection.add,但这是()-> 5是什么?以及如何将int值覆盖为Scoreable类型

public class ScoreCollectionTest {

    public void addTwoNumbersForMean() {

        ScoreCollection collection = new ScoreCollection();

        collection.add(()->5);
        collection.add(()->7);

    }

}
public class ScoreCollection {

    private List<Scoreable> scores = new ArrayList<>();

    public void add(Scoreable scoreable) {
        scores.add(scoreable);
    }

    public int arithmeticMean() {
        int total = scores.stream().mapToInt(Scoreable::getScore).sum();
        return total / scores.size();
    }
}

这是Scoreable界面

public interface Scoreable { 
    int getScore(); 
} 

2 个答案:

答案 0 :(得分:5)

collection.add(()->5);是一种语法糖,用于:

collection.add(new Scoreable() {

  @Override
  int getScore() {
    return 5;
  }
});

由于Scoreable只有一种方法,因此它可以称为@FunctionalInterface,并且可以在lambda表达式中使用,而不是使用匿名类

答案 1 :(得分:0)

不知道什么是Scoreable,我假设它是一个带有一个方法的接口(该方法的名称无关紧要),该方法不带参数并且返回整数。

编译器将其解释为功能接口(因为它满足功能接口的所有要求),()->5是始终返回5的无参数方法的lambda表达式。