首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda表达式JAVA-8

Lambda表达式JAVA-8
EN

Stack Overflow用户
提问于 2018-11-15 06:30:43
回答 3查看 324关注 0票数 3

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

通过在同一个类中创建多个接口实例,我们可以为抽象方法创建多个实现(lambda表达式)吗??--我尝试了该代码,它运行得非常完美.

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

考虑以下代码:

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-15 06:33:14

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2018-11-15 06:35:24

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

代码语言:javascript
复制
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)); 
票数 3
EN

Stack Overflow用户

发布于 2021-02-02 12:44:49

让我告诉你正确的用例。

代码语言:javascript
复制
    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);
        });
    }
}

减少了Lambda表达式的编码.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53313656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档