- WhyJava8.java
- OopAndFpExamples.java
- 간결한 코드로 가독성을 높이고 오류 발생률을 줄일 수 있다.
- FunctionalInterfaceExamples.java
- Functional Interface : Interface 중, abstract 메서드를 하나만 가지는 인터페이스 -> 메서드 람다를 사용할 수 있음
- Identity Function : 변형 없이 입력 값을 그대로 반환하는 함수
- Function<T, R> : R apply(T t);
- FunctionalInterfaceExamples.java
- Consumer : void accept(T t);
- FunctionalInterfaceExamples.java
- Predicate : boolean test(T t);
- FunctionalInterfaceExamples.java
- Supplier : T get();
- CustomFunctionalInterfaceExamples.java
- @FunctionalInterface : abstract 메서드가 하나가 아니면 컴파일 에러 발생!
- CustomFunctionalInterfaceExamples.java
- FunctionalInterfaceRealExamples.java
- Target method is generic 에러
- Predicate vs Predicate<? super T>
- StreamExamples1.java
- StreamExamples2.java
- Stream은 Lazy Iterator다.
- Stream API는 게으르게 동작하기 때문에 효율적이다.
- StreamExamples3.java
- Intermediate Operation Method
- Stream을 리턴하기 때문에 계속 Method Chaining을 통해서 무엇을 해야할지 Stream에게 지시할 수 있다.
- Terminal Operation Method
- 외부 반복 (for) vs 내부 반복 (stream)
- StreamExamples5ParallelPerformancePractical.java
- 상황에 따라 parallel stream 이 유리할 수도 아닐 수도 있다. 상황에 맞게 사용하자!
- ClosureExamples.java
- First Class Function : Function이 First Class Citizen을 의미한다.
- parameter로 넘길 수 있다.
- return 값으로 사용할 수 있다.
- variable / data structure에 저장할 수 있다.
- java 8 이전에는 final 이어야만 했지만 java 8 이후에는 final or effectively final 이면 된다.
- effectively final : 선언 후 재정의 하지 않은 변수
- Anonymous Class와 Lambda Expression의 차이
- this가 가리키는 scope의 차이 : lambda expression의 경우 object 자체의 scope이 없다.
- anonymous의 경우 오버로딩이 불가했지만 lambda의 경우
- HigherOrderFunctionExamples.java
- 두 가지 조건 중 하나 이상 만족하는 function
- (고계함수 or 고차함수) 파라미터로 function을 받는 경우
- function을 실행했을때 return 값으로 function이 오는 경우
- MethodReferenceExamples.java
- First Class Function 검증
- 생성자를 Method Reference로 사용하는법
출처 : https://www.youtube.com/watch?v=mu9XfJofm8U&list=PLRIMoAKN8c6O8_VHOyBOhzBCeN7ShyJ27