-
JAVA 람다와 스트림 - java.util.funtion 패키지개발언어/JAVA 2023. 12. 18. 13:11
java.util.funtion 패키지
▶ 자주 사용되는 다양한 함수형 인터페이스를 제공
Predicate 예시
Predicate<String> isEmptyStr = s -> s.length()==0; String s = ""; if(isEmptyStr.test(s)) //if(s.lengh()==0); System.out.println("This is empty String");
함수형 인터페이스 Predicate<T>를 사용할 때 람다 함수의 반환 값의 타입은 boolean이어야 한다.
▶ 매개변수가 2개인 함수형 인터페이스
매개 변수를 2개 받는 함수형 인터페이스 까지는 미리 정의 가 되어있지만 3개를 받는 것은 정의되어 있지 않다.
매개변수를 3개 가지는 함수형 인터페이스
@FunctionalInterface interface TriFunction<T,U,V,R>{ R apply(T t, U u, V v); }
매개 변수 3개를 가진 즉 입력을 3개를 받는 함수형 인터페이스는 위 코드 처럼 직접 정의하여 사용할 수 있다.
▶매개변수 타입과 반환타입이 일치하는 일치하는 함수형 인터페이스
정리 예제
package lambda; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; public class Quiz { public static void main(String[] args) { Supplier <Integer> s = () -> (int)(Math.random()*100)+1; Consumer<Integer> c = i -> System.out.print(i +", "); Predicate<Integer> p = i -> i%2==0; Function<Integer,Integer> f = i -> i/10*10; // list를 랜덤값으로 채운다. List<Integer> list = new ArrayList<>(); makeRandomList(s,list); System.out.println(list); //짝수를 출력 printEvenNum(p,c,list); //1의 자리 절삭한 list 출력 List<Integer> newList = doSomething(f,list); System.out.println(newList); } static <T> List<T> doSomething(Function<T,T>f,List<T>list){ List<T> newList =new ArrayList<T>(list.size()); for(T l :list) { newList.add(f.apply(l)); } return newList; } static void printEvenNum(Predicate<Integer> p, Consumer<Integer> c, List<Integer> list){ System.out.print("["); for(int l: list){ if(p.test(l)){ c.accept(l); } } System.out.println("]"); } static <T> void makeRandomList(Supplier<T> s, List<T> list){ for(int i =0; i <10; i++){ // Supplier로 부터 1~100의 난수를 받아서 list에 추가 list.add(s.get()); } } }
[출처 - 자바의 정석 - 기초편 , 저 남궁성]
'개발언어 > JAVA' 카테고리의 다른 글
JAVA 람다와 스트림 - 컬렉션 프레임워크(CF)와 함수형 인터페이스 (1) 2023.12.18 JAVA람다와 스트림 - Predicate의 결합 (1) 2023.12.18 JAVA 람다와 스트림 - 함수형 인터페이스 (0) 2023.12.15 JAVA 람다와 스트림 - 람다식(Lambda Expression) (1) 2023.12.15 Java - 컬렉션 프레임워크(제네릭)1-1 (0) 2023.11.07