카테고리 없음

자바의 정석 java.util.function 패키지

구슬탈출 2023. 7. 31. 23:18

자주 사용되는 다양한 함수형 인터페이스를 제공

Predicate<Strig> isEmptyStr = s -> s.length() == 0;
String s = "";

if(isEmptyStr.test(s)) // if(s.length() == 0);
	System.out.println("This is an empty String");

문제. 아래의 빈 칸에 알맞은 함수형 인터페이스(java.util.function패키지)를 적으시오

  • 정답
    1. Supplier<Integer>
    2. Consumer<Integer>
    3. Predicate<Integer>
    4. Function<Integer,Integer>

(2/3)

매게변수가 2개인 함수형 인터페이스

@FunctionalIntereface
interface TriFunction<T,U,V,R> {
	R apply(T t, U u , V v);
}

(3/3)

  • 매게변수의 타입과 반환타입이 일치하는 함수형 인터페이스

package test;

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 Main {
	
	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<Integer> list = new ArrayList<>();
		makeRandomList(s,list); // list를 렌덤값으로 채운다.
		System.out.println(list);
		printEvenNum(p,c,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 i : list ) {
			newList.add(f.apply(i));	
		}
		
		return newList;
	}
	
	// Cousumer<Integer> c = i -> System.out.print(i+", ")
	// Predicate<Integer> p = i -> i %2 == 0;
	static <T> void printEvenNum(Predicate<T> p,Consumer<T> c,List<T> list) {
		System.out.print("[");
		for(T i : list) {
			if(p.test(i)) 
				c.accept(i);
		}
		System.out.println("]");
	}
	
	static <T> void makeRandomList(Supplier<T> s, List<T> list) {
		for(int i = 0 ; i < 10 ; i++) {
			list.add(s.get()); // Supplier로 부터 1~100의 난수를 받아서 list에 추가
		}
	}
}