Java 8 이전의 익명 클래스 대신 람다를 이용하여 간결하고 직관적으로 구현 가능
// Java 8 이전
Runnable runnable = new Runnable() {
@Override
public void run() {
soutp("Hello World");
}
}
// Java 8 이후
Runnable runnableLambda = () -> soutp("Hello World");
특정 메서드만을 호출하는 람다의 축약형
람다 | 메서드 레퍼런스 |
---|---|
(Soccer s) → s.getGoal() | Soccer::setGoal |
() → Thread.currentThread().dumpStack() | Thread.currentThread()::dumpStack |
(str, i) → str.substring(i) | String::substring |
(String s) → System.out.println(s) | System.out.println |
인터페이스에서 메소드를 구현할 수 있는 default
키워드 추가.
public interface SomeInterface {
public default void doSometing() {
soutp("Do Someting.");
}
}
NPE( Null Pointer Exception ) 이슈를 대응하기 위한 Wrapper 클래스
파라미터로 넘어가는 것 보다 반환 타입으로써 제한적으로 사용되도록 설계.
// String optStr1 = null;
Optional<String> optStr1 = Optional.empty();
// 데이터가 절대 Null이 아닌 경우
// 데이터가 null인 경우 NPE 발생
Optional<String> optStr2 = Optional.of("Optional Of");
// 데이터가 Null일 수 도 있는 경우
Optional<String> optStr3 = Optional.ofNullable("Optional Of Nullable");
Collection을 처리하면서 발생하는 모호함과 반복적인 코드 문제와 멀티코어 활용시의 어려움을 해결.
List<String> list = Arrays.asList("ABC", "DEF");
list.stream()
.filter(name -> name.startWith("A"))
.map(String::toUpperCase)
.forEach(System.out::println);