我刚刚开始使用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。
发布于 2018-11-15 06:33:14
两个lambda表达式分别实现Interf功能接口。因此,该接口的每个实现都有该接口的单个抽象方法的单个实现。
甚至在Java 8和lambda表达式之前,您就可以创建两个实现Interf接口的匿名类实例。它们中的每一个都有一个Interf单一方法的实现。
两个lambda表达式是在同一个类中定义的,这并不意味着函数接口的抽象方法的两个实现属于同一个类。
发布于 2018-11-15 06:35:24
实际上,它们是同一个接口的两个不同的实现。实际上,您可以使用现有的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)); 发布于 2021-02-02 12:44:49
让我告诉你正确的用例。
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表达式的编码.
https://stackoverflow.com/questions/53313656
复制相似问题