Lambda表达式JAVA-8

Lambda表达式JAVA-8,lambda,java-8,Lambda,Java 8,我刚开始使用Java1.8版本,在阅读有关lambda表达式的教程时遇到了一个问题 通过在同一个类中创建接口的多个实例,抽象方法是否可以有多个实现(lambda表达式)??? 我试过代码,它运行得很好 现在我的问题是接口的概念是每个实现类都有一个抽象方法的定义。那么我们怎么能在同一个类中有两个方法体(lambda表达式) 考虑以下代码: public static void main(String[] args) { Interf i = (a, b) -> a + b;

我刚开始使用Java1.8版本,在阅读有关lambda表达式的教程时遇到了一个问题

通过在同一个类中创建接口的多个实例,抽象方法是否可以有多个实现(lambda表达式)??? 我试过代码,它运行得很好

现在我的问题是接口的概念是每个实现类都有一个抽象方法的定义。那么我们怎么能在同一个类中有两个方法体(lambda表达式)

考虑以下代码:

public static void main(String[] args) {

    Interf i = (a, b) -> a + b;
    System.out.println("The result is >> " + i.result(10, 20));

    Interf i1 = (a, b) -> a - b;
    System.out.println("The result is >> " + i1.result(10, 20));


}
输出:

结果是>>30


结果是>>-10

两个lambda表达式中的每一个都分别实现了
Interf
功能接口。因此,该接口的每个实现都有该接口的单个抽象方法的单个实现

甚至在Java8和lambda表达式之前,您就可以创建两个匿名类实例来实现
Interf
接口。它们中的每一个都有
Interf
单一方法的单一实现


两个lambda表达式在同一个类中定义的事实并不意味着函数接口的抽象方法的两个实现属于同一个类。

实际上它们是同一接口的两个不同实现。事实上,您可以使用现有的
BinaryOperator
执行相同的操作,而不是像这样重新设计轮子

BinaryOperator<Integer> sum = (n1, n2) -> n1 + n2;
BinaryOperator<Integer> substract = (n1, n2) -> n1 - n2;

System.out.println(sum.apply(10, 20));
System.out.println(substract.apply(10, 20)); 
二进制运算符和=(n1,n2)->n1+n2;
二进制运算符减法=(n1,n2)->n1-n2;
系统输出println(求和应用(10,20));
System.out.println(substract.apply(10,20));

让我告诉您正确的用例

    class Person {
      String firstName;
      int age;
      enum Gender {
         MALE, FEMALE;
       }

      Double salary;

      Gender gender;

      public Person(String firstName, int age, Double salary, Gender gender) {
        super();
        this.firstName = firstName;
        this.age = age;
        this.salary = salary;
        this.gender = gender;
      }

    void printPerson(Person p, PersonFilter pf) {
        if (pf.filter(p)) {
            System.out.println("First Name: "+p.firstName+" Age: "+p.age+" Salary: "+p.salary+" Gender: "+p.gender);
        }

    }
}

interface PersonFilter {  // Functional interface
    boolean filter(Person person);
}
public class LambdaExpressionTwo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person("Atul", 31, 10000.0, Person.Gender.MALE));
        persons.add(new Person("Mohan", 32, 17500.0, Person.Gender.MALE));
        persons.add(new Person("Mic", 34, 15000.0, Person.Gender.FEMALE));
        persons.add(new Person("Ricky", 30, 15000.0, Person.Gender.MALE));

        /*persons.forEach(p-> {  // Search Criteria Code in an Anonymous Class
            p.printPerson(p, new PersonFilter() {
                @Override
                public boolean filter(Person person) {
                    return p.gender == Person.Gender.FEMALE;
                }
            });
        });*/
        
        persons.forEach(p-> { // Search Criteria Code with a Lambda Expression
            p.printPerson(p, (Person p1) -> p1.gender == Person.Gender.MALE);
        });
    }
}
班级人员{
字符串名;
智力年龄;
枚举性别{
男,女,;
}
双薪;
性别;
公众人物(姓名、年龄、双薪、性别){
超级();
this.firstName=firstName;
这个。年龄=年龄;
这个。薪水=薪水;
这个。性别=性别;
}
无效打印人员(人员p、人员过滤器pf){
if(pf.过滤器(p)){
System.out.println(“名字:+p.firstName+”年龄:+p.Age+”薪水:+p.Salary+”性别:+p.Gender);
}
}
}
接口PersonFilter{//函数接口
布尔过滤器(个人);
}
公共类lambdaexpressionwo{
/**
*@param args
*/
公共静态void main(字符串[]args){
List persons=new ArrayList();
新增人员(新人员(“Atul”,3110000.0,人员性别,男性));
新增人员(新人员(“Mohan”,3217500.0,人员。性别。男性));
新增人员(新人员(“Mic”,3415000.0,人员。性别。女性));
新增人员(新人员(“Ricky”,30,15000.0,人员性别,男性));
/*persons.forEach(p->{//匿名类中的搜索条件代码
p、 printPerson(p,新PersonFilter(){
@凌驾
公共布尔过滤器(个人){
返回p.gender==Person.gender.femal;
}
});
});*/
persons.forEach(p->{//带有Lambda表达式的搜索条件代码
p、 printPerson(p,(personp1)->p1.gender==persone.gender.MALE);
});
}
}
使用Lambda表达式进行较少编码。