Java 功能接口实现和用例

Java 功能接口实现和用例,java,java-8,functional-programming,functional-interface,Java,Java 8,Functional Programming,Functional Interface,我只是想写一个功能接口来理解不同的用例 通过查看我编写的以下代码,我了解可以使用lambda表达式实现不同的实现。除此之外,还有人能展示复杂的实现吗 是否可以在lambda表达式中使用其他默认方法,即addLikeOtherWay?如果是,在我的例子中是怎样的 为什么我只有一个抽象方法的接口?在我的界面中只有一个抽象方法的用例是什么 public class Calculator { public static void main(String[] args) { IC

我只是想写一个功能接口来理解不同的用例

通过查看我编写的以下代码,我了解可以使用lambda表达式实现不同的实现。除此之外,还有人能展示复杂的实现吗

是否可以在lambda表达式中使用其他默认方法,即
addLikeOtherWay
?如果是,在我的例子中是怎样的

为什么我只有一个抽象方法的接口?在我的界面中只有一个抽象方法的用例是什么

public class Calculator {

    public static void main(String[] args) {
        ICalculator i = (int a, int b) -> a + b;
        System.out.println(i.add(5, 2));
        i = (int a, int b) -> a + b + a;
        System.out.println(i.add(5, 2));
    }
}

@FunctionalInterface
interface ICalculator {

    public int add(int a, int b);

    default int addLikeThis(int a, int b) {
        return a + b;
    }

    default int addLikeOtherWay(int a, int b) {
        return a + b + a + b;
    }

}
“是否可以在lambda表达式中使用默认方法?”是。事实上,许多函数接口都包含默认方法。一个接口中只需要一个抽象方法就可以成为函数接口,否则lambda将“未实现”其他接口方法,这是不允许的。但这里是如何应用默认值的。下面的
BiFunction
接口是从API源代码sans JavaDoc中提取的

以下代码之所以有效,是因为
binarymoperator
unarymoperator
extend
BiFunction
Function

BinaryOperator add=(numb1,numb2)->numb1+numb2;
一元运算符mul=resultFromAdd->resultFromAdd*20;
二进制运算符addThenMul=(numb1,numb2)->add.andThen(mul.apply)(numb1,numb2);
int result=addThenMul.apply(10,20);//生产(10+20)*20=600
以下内容是从JavaAPI源文件中提取的

@functioninterface
公共接口双功能{
R应用(T,U);
默认双函数和(
作用
为什么我的接口只有一个抽象方法?在我的接口中只有一个抽象方法的用例是什么

public class Calculator {

    public static void main(String[] args) {
        ICalculator i = (int a, int b) -> a + b;
        System.out.println(i.add(5, 2));
        i = (int a, int b) -> a + b + a;
        System.out.println(i.add(5, 2));
    }
}

@FunctionalInterface
interface ICalculator {

    public int add(int a, int b);

    default int addLikeThis(int a, int b) {
        return a + b;
    }

    default int addLikeOtherWay(int a, int b) {
        return a + b + a + b;
    }

}
以便于使用lambda表达式,这些表达式是无名函数。
Lambda表达式使代码具有表达能力,减少了混乱。它还使代码更具可读性。这是基于我使用Lambda表达式的经验。

重复链接并不能回答我的大多数问题。
功能界面的目标是允许您将Lambda从中提取出来,因此它是抽象的,因为实现将是lambdai,可以使用其他默认方法,即lambda表达式中的addLikeOtherWay?这里“in lambda expression”的确切含义是什么?我的意思是您可以调用
i.addLikeOtherWay(5,2)
以确保调用该方法。为什么我的接口只有一个抽象方法?在我的接口中只有一个抽象方法的用例是什么?…拥有一个的用例之一,除此之外,您的接口可能不只是需要一个依赖于如何设计界面。