Lambda Expression

장석빈·2022년 6월 6일
0

Functional Interface
-추상(abstract) 메서드를 1개만 갖고 있는 인터페이스
-메서드의 인자로 메서드를 전달하는 것이 목적

ex1)

@FunctionalInterface
public interface Greeting{
	void greet();//public abstract는 생략가능
}

ex2)


public class GreetingEx {
    //Functional interface Greeting의 greet() 메서드를 수행
    public void sayHello(Greeting greeting) {
        greeting.greet();
    }

    public void go() {
        //1.Greeting을 구현한 영어 인사 로컬 클래스
        class EnglishGreeting implements Greeting {

            @Override
            public void greet() {
                System.out.println("Hello.");
            }
        }
        Greeting englishGreeting = new EnglishGreeting();
        sayHello(englishGreeting);
        //2.프랑스어 인사는 anonymous class(익명 클래스) 사용
        Greeting frenchGreeting = new Greeting() {
            @Override
            public void greet() {
                System.out.println("Bonjour.");
            }
        };
        sayHello(frenchGreeting);

        //3.스패인어 인사는 annonynous 클래스를 메서드에 직접 삽입.
        sayHello(new Greeting() {
            @Override
            public void greet() {
                System.out.println("Hola.");
            }
        });

        //4,한국어 인사는 lambda expression 사용
        //lambda expression은 functional interface 구현체의 메서드 내부만 표현한 것.
        sayHello(() ->
                System.out.println("안녕하세요."));
    }

    public static void main(String[] args) {
        new GreetingEx().go();
    }
}

ex3)

Person.class```
public class Person {
String name;
int birthyear;
String email;

public Person(String name, int birthyear, String email) {
    this.name = name;
    this.birthyear = birthyear;
    this.email = email;
}

public String getName() {
    return name;
}

public int getBirthyear() {
    return birthyear;
}

public String getEmail() {
    return email;
}

@Override
public String toString() {
    return "Person{" + "name=" + name + '\'' + ", birthyear=" + birthyear + ", email=" + email + '\'' + '}';
}

}

CheckPerson.interface

public interface CheckPerson {
boolean test(Person p);
}

PersonEx.class

public class PersonEx {
public void printPersons(List roster, CheckPerson checkPerson) {
for (Person person : roster) {
if (checkPerson.test(person)) {
System.out.println(person.toString());
}
}
}

public void go() {
    Person p1 = new Person("아이유", 1993, "iu@gmail.com");
    Person p2 = new Person("이선균", 1975, "sum@naver.com");
    Person p3 = new Person("이지아", 1978, "lee@gmail.com");

    List<Person> roster = new ArrayList<>();
    roster.add(p1);
    roster.add(p2);
    roster.add(p3);

    //성이 "이" 출력(annonymous 클래스)
    System.out.println("성이 이씨");
    printPersons(roster, new CheckPerson() {
        @Override
        public boolean test(Person p) {
            return p.getName().startsWith("이");
        }
    });

    //1990년 이후 출생자 출력(lambda expression)
    System.out.println("1990년 이후 출생자");
    printPersons(roster, (Person p) -> {
        return p.getBirthyear() >= 1990;
    });

    //g메일 사용자 출력
    System.out.println("g메일 사용자");
    printPersons(roster, p -> p.getEmail().endsWith("gmail.com"));
}

public static void main(String[] args) {
    new PersonEx().go();
}

}

profile
회피형 인간의 개과천선기

0개의 댓글