Java/객체지향

[객체지향][람다식/Lambda Expression] - java.util.function패키지

얄루몬 2022. 3. 9. 20:00

https://youtu.be/HPxnDM_FkGc?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.


[java.util.function패키지]

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

  • 우리가 사용하는 함수의 갯수가 별로 없기 때문에 자바 자체에서 표준으로 만들어 놓은 것을 공통으로 사용하는 구조이다. 

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

  • Bisupplier는 없는 이유가 함수 반환값이 0또는 1이기 때문에 없다.
  • 매개변수 3개를 가진 경우의 함수형 인터페이스는 없지만 우리가 직접 만들어서는 사용이 가능하다.

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

[예제]

package javajungsuk;

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 Java14_2 {

	public static void main(String[] args) {
		Supplier<Integer> s = () -> (int)(Math.random()*100) +1;
		Consumer<Integer> c = i -> System.out.println(i+", ");
		Predicate<Integer> p = i -> i%2 == 0;
		Function<Integer, Integer> f = i -> i / 10 * 10; //1의자리를 없앰
		
		List<Integer> list = new ArrayList<>();
		makeRandomList(s,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;
	}
	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());
		}
	}
}