개발자의 서재
[java8] 함수형 인터페이스와 람다 - 메소드 레퍼런스 본문
package com.kevin.java8.functionalInterfaceLamda;
import javax.annotation.processing.Generated;
/**
* 강의 2 - 함수형 인터페이스와 람다 = 4.메소드 레퍼런스
*/
public class Greeting {
private String name;
//생성자1
public Greeting(){}
//생성자2
public Greeting(String name){
this.name = name;
}
//일반 메소드
public String hello(String name){
return "hello "+name;
}
//스태틱 메소드
public static String hi(String name){
return "hi "+name;
}
public String getName(){
return name;
}
}
package com.kevin.java8.functionalInterfaceLamda;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
/**
* 강의 2 - 함수형 인터페이스와 람다 = 4.메소드 레퍼런스
*/
public class App {
public static void main(String[] args) {
//UnaryOperator = Function 함수형 인터페이스중 입력,리턴이 같은 타입일때 하나의 타입만 명시해서 사용가능
UnaryOperator<String> hi1 = (s) -> "hi "+s;
//위 함수인터페이스는 Greeting.hi() 와 같은 기능
System.out.println(hi1.apply("test"));
//아래와 같이 변경 가능 :: 는 메소드레퍼런스를 뜻함. 함수형인터페이스의 구현체로
//Greeting.hi() 스태틱 메소드를 사용
UnaryOperator<String> hi2 = Greeting::hi;
System.out.println(hi2.apply("test"));
//구현체로 인스턴스 메소드를 사용하고자 할때는 아래처럼
Greeting greeting = new Greeting();
UnaryOperator<String> hello = greeting::hello;
System.out.println(hello.apply("test"));
/**
* 구현체로 Greeting::new 를 똑같이 썻지만, 함수형인터페이스가 각각
* Supplier 와 Function 으로 입력,리턴값형태가 서로 다르기때문에 각각 다른 생성자가 실행됨.
*/
//구현체로 클래스의 생성자를 사용할때는
Supplier<Greeting> newGreeting = Greeting::new;
System.out.println("getName()="+newGreeting.get().getName());
//구현체로 클래스의 생성자2를 사용할때는
Function<String, Greeting> newGreeting2 = Greeting::new;
System.out.println("getName()="+newGreeting2.apply("test").getName());
//임의 객체의 인스턴스 메소드 참조 예시
String[] names = {"chakyung","chawon","naeun","yena","rachel","jinsol"};
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});
//위 형태를 람다로 변경
Arrays.sort(names, (o1, o2) -> 0);
//위 람다식 함수형 인터페이스의 구현체를 String 클래스의 compareToIgnoreCase 메소드를 사용해
//메소드레퍼런스를 사용해서 구현해봄. (*compareToIgnoreCase : 대소문자 무시 정렬)
Arrays.sort(names, String::compareToIgnoreCase);
System.out.println(Arrays.toString(names));
}
}
'JAVA' 카테고리의 다른 글
[java8] 인터페이스의 변화 - 자바 8 API의 기본 메소드와 스태틱 메소드(foreach, removeIf, sort(comparator) (0) | 2022.06.20 |
---|---|
[java8] 인터페이스의 변화 - 인터페이스 기본메소드, 스태틱메소드 (0) | 2022.06.13 |
[java8] 함수형 인터페이스와 람다 (0) | 2022.06.13 |
[java8]새로운 날짜와 시간 API (0) | 2022.06.13 |
[lombok] 롬복 - @Slf4j 로 log 출력 (0) | 2022.03.15 |
Comments