* function 패키지
자주 사용되는 함수형 인터페이스
- 매개변수가 0개 혹은 1개인 함수형 인터페이스
| 함수형 인터페이스 | 메서드 | 설명 |
| java.lang.Runnable | void run() | 매개변수, 반환값 없음 |
| Supplier<T> | T get() | 매개변수는 없고, 반환값만 있음 |
| Consumer<T> | void accept(T t) | 매개변수는 있고, 반환값 없음 |
| Function<T, R> | R applt(T t) | 일반적인 함수, 하나의 매개변수를 받아 결과 반환 |
| Predicate<T> | boolean test(T t) | 조건식을 표현할 때 사용 매개변수 하나, 반환 타입은 boolean |
Predicate<String> isEmptyStr = s -> s.length()==0;
String s = "";
if(isEmptyStr.test(s){
System.out.println("This is an empty String);
}
- 매개변수가 2개인 함수형 인터페이스
| 함수형 인터페이스 | 메서드 | 설명 |
| BiConsumer<T,U> | void accept(T t, U u) | 두 개의 매개변수 있고, 반환값 없음 |
| BiPredicate<T,U> | boolean test(T t, U u) | 조건식을 표현하는데 사용 매개변수는 둘, 반환값은 boolean |
| BiFunction<T,U,R> | R apply(T t, U u) | 두 개의 매개변수를 받아 하나의 결과 반환 |
- 매개변수 3개 이상인 경우엔 직접 만들면 됨.
@FunctionalInterface
interface TriFunction<T,U,V,R>{
R apply(T t, U u, V v);
}
- 매개변수의 타입과 반환 타입이 일치하는 함수형 인터페이스
| 함수형 인터페이스 | 메서드 | 설명 |
| UnaryOperator<T> | T apply(T t) | Function의 자손 매개변수와 결과의 타입이 같다. |
| BinaryOperator<T> | T apply(T t, T t) | BiFunction의 자손 매개변수과 결과의 타입이 같다. |
* Predicate의 결합
- and(), or(), negate() 로 두 Predicate를 하나로 결합
Predicate<Integer> p = i --> i<100;
Predicate<Integer> q = i --> i<200;
Predicate<Integer> r = i --> i%2 ==0;
//
Predicate<Integer> notP = p.negate();
Predicate<Integer> all = notP.and(q).or(r) // 100<=i && i<200 || i%2==0
Predicate<Integer> all2 = notP.and(q.or(r)) // 100<=i &&(i<200 || i&2==0)
//
all.test(2); // true
all2.test(2); // false
* 컬렉션 프레임웍과 함수형 인터페이스
| 인터페이스 | 메서드 | 설명 |
| Collection | boolean removeif(Predicate<E> filter) | 조건에 맞는 요소를 삭제 |
| List | void replaceAll(UnaryOperator<E> operator) | 모든 요소를 변환하여 대체 |
| Iterable | void forEach(Consumer<T> action) | 모든 요소에 작업 action을 수행 |
| Map | V compute(K key, BiFunction<K,V,V> f) | 지정된 키의 값에 작업 f를 수행 |
| V computeIfAbsent(K key, Function<K, V> f) | 키가 없으면 작업 f 수행 후 추가 | |
| V computeIfPresent(K key, BiFunction<K, V, V> f) | 지정된 키가 있을 때, 작업 f 수행 | |
| V merge (K key, V value, BiFunction< V, V, V> f) | 모든 요소에 병합작업 f를 수행 | |
| void forEach (BiCOnsumer<K, V> action) | 모든 요소에 작업 action 수행 | |
| void replaceAll(BiFunction<K, V, V> f) | 모든 요소에 치환작업 f를 수행 |
list.forEach(i -> System.out.print(i)); // list 모든 요소 출력
list.removeIf(x -> x%2 == 0 || x%3 ==0); // list 에서 2 또는 3의 배수 제거
list.replaceAll(i->i*10) // 모든 요소에 10 곱하기
// map의 모든 요소를 {k,v}의 형식으로 출력
map.forEach((k,v) -> System.out.println("{" +k+ "," +v+ "}"));'코딩 > JAVA 공부' 카테고리의 다른 글
| [JAVA] 자바의 정석 _ 스트림(Stream) (0) | 2022.10.29 |
|---|---|
| [JAVA] 자바의 정석 _ Optional<T> (0) | 2022.10.28 |
| [JAVA] 자바의 정석 _ 람다식/ 함수형 인터페이스/ 메서드 참조 (0) | 2022.10.24 |
| [JAVA] 자바의 정석 _ 쓰레드 (0) | 2022.10.20 |
| [JAVA] 자바의 정석 _ 열거형(enum) / 애너테이션 (0) | 2022.10.18 |