개발언어/JAVA
JAVA 람다와 스트림 - java.util.funtion 패키지
Surge100
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());
}
}
}
[출처 - 자바의 정석 - 기초편 , 저 남궁성]