λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ν”„λ‘œκ·Έλž˜λ° 곡뢀/Java

λžŒλ‹€μ‹(Lambda Expression)

Ex87 ~ Ex90

 

λžŒλ‹€μ‹, Lambda Expression
- ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ„ μ§€μ›ν•˜λŠ” ν‘œν˜„식
- λžŒλ‹€μ‹μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œ μΌλΆ€κ°€ κ°„κ²°ν•΄μ§„λ‹€.(호뢈호)
- Java 8 μΆœμ‹œ
- λͺ©μ  > μ»¬λ ‰μ…˜(λ°°μ—΄) μ‘°μž‘

- μžλ°”μ˜ λ©”μ†Œλ“œλ₯Ό ν‘œν˜„ν•˜λŠ” λ°©λ²• μ€‘ ν•˜λ‚˜λ‘œ μ‚¬μš©
- λžŒλ‹€μ‹μ€ λ©”μ†Œλ“œλ₯Ό λŒ€μ‹ ν•˜λŠ” μ½”λ“œλΈ”λŸ­μ΄λ‹€.
- μžλ°”μ˜ λžŒλ‹€μ‹μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ„œ λ§Œλ“ λ‹€.
- μžλ°”μ˜ λžŒλ‹€μ‹μ€ μ΅λͺ… κ°μ²΄(좔상 λ©”μ†Œλ“œ)λ₯Ό λ§Œλ“œλŠ” ν‘œν˜„을 κ°„μ†Œν™”μ‹œν‚¨ κΈ°μˆ μ΄λ‹€.

- λžŒλ‹€μ‹μ„ μ €μž₯ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λŠ” λ°˜λ“œμ‹œ Fuctional Interface이어야 ν•œλ‹€.(좔상 λ©”μ†Œλ“œλ₯Ό λ”± 1개만 κ°€μ Έμ•Όν•©λ‹ˆλ‹€.) > 


λžŒλ‹€μ‹ ν˜•식
- μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ = λžŒλ‹€μ‹
- MyInterface m3 = () -> {};

(λ§€κ°œλ³€μˆ˜) -> {κ΅¬ν˜„λΆ€};
a. (λ§€κ°œλ³€μˆ˜): λ©”μ†Œλ“œμ˜ μΈμžλ¦¬μŠ€νŠΈ
b. ->: ν™”μ‚΄ν‘œ(Arrow), κ΅¬ν˜„λΆ€λ₯Ό ν˜ΈμΆœν•˜λŠ” μ—­ν• 
c. {}: λ©”μ†Œλ“œμ˜ κ΅¬ν˜„λΆ€


public void test() {
syso();
}

//읡λͺ… λ©”μ†Œλ“œ(ν•¨μˆ˜)
() -> {
syso();
}

 

 

 

μš”κ΅¬μ‚¬ν•­] MyInterfaceλ₯Ό κ΅¬ν˜„ν•œ κ°μ²΄λ₯Ό μƒμ„±ν•˜μ‹œμ˜€.

		//1. ν΄λž™μŠ€ + 객체
		MyInterface m1 = new MyClass(); 
		m1.test();
		
		//2. 읡λͺ… 객체 
		MyInterface m2 = new MyInterface() {
			@Override
			public void test() {
				System.out.println("읡λͺ… ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•œ λ©”μ†Œλ“œ");
			}
		};
		m2.test();
		
		
		//3. λžŒλ‹€μ‹
		MyInterface m3 = () -> {
			System.out.println("λžŒλ‹€μ‹μœΌλ‘œ κ΅¬ν˜„ν•œ λ©”μ†Œλ“œ");
		};
		m3.test();
		
		
		TestInterface t1 = new TestInterface() {
			
			@Override
			public void bbb() {
				System.out.println("B");
			}
			
			@Override
			public void aaa() {
				System.out.println("A");
			}
		};
		
		
		
		//The target type of this expression must be a functional interface
//		TestInterface t2 = () -> {
//			//aaa() or bbb()
//		};
//		
//		t2.aaa();
//		t2.bbb();
		
		
		
		//좔상 λ©”μ†Œλ“œ ν˜•μ‹μ— 따라..
		//- λ§€κ°œλ³€μˆ˜ O, X
		//- λ°˜ν™˜κ°’ O, X
		
		
		NoParameterNoReturn pr1 = new NoParameterNoReturn() {
			
			@Override
			public void call() {
				System.out.println("pr1");
			}
		};
		pr1.call();
		
		NoParameterNoReturn pr2 = () -> {
			System.out.println("pr2");
		};
		pr2.call();
		
		//** λžŒλ‹€μ‹ κ΅¬ν˜„λΆ€μ— μ‹€ν–‰λ¬Έμž₯ 1쀄이면 {} μƒλž΅
		NoParameterNoReturn pr3 = () -> System.out.println("pr3");
		pr3.call();
		
		
		//void call(int n)
		ParameterNoReturn pr4 = (int n) -> {
			System.out.println("pr4: " + n);
		}; 
		pr4.call(100);
		pr4.call(200);
		pr4.call(300);
		
		
		//** λ§€κ°œλ³€μˆ˜μ˜ μžλ£Œν˜•μ„ μƒλž΅ν•  수 μžˆλ‹€. 
		ParameterNoReturn pr5 = (n) -> {
			System.out.println("pr5: " + n);
		};
		pr5.call(400);
		
		//** λ§€κ°œλ³€μˆ˜μ˜ ()λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
		ParameterNoReturn pr6 = n -> {
			System.out.println("pr6: " + n);
		};
		pr6.call(500);
		
		ParameterNoReturn pr7 = n -> System.out.println("pr7: " + n);
		pr7.call(600);
		
		
		//void call(String name, int age);
		MultiParameterNoReturn pr8 = (String name, int age) -> {
			System.out.println("pr8: " + name + "," + age);
		};
		pr8.call("홍길동", 20);
		
		MultiParameterNoReturn pr9 = (name, age) -> {
			System.out.println("pr9: " + name + "," + age);
		};
		pr9.call("홍길동", 20);	
		
		//** λ§€κ°œλ³€μˆ˜μ˜ ()λŠ” λ§€κ°œλ³€μˆ˜κ°€ 1개일 λ•Œλ§Œ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.(μ—†μ„λ•Œλ„ μƒλž΅ λΆˆκ°€)
//		MultiParameterNoReturn pr10 = name, age -> {
//			System.out.println("pr10: " + name + "," + age);
//		};
		
		
		//int call();
		NoParameterReturn pr11 = () -> {
			return 100;
		}; 
		System.out.println("pr11: " + pr11.call());
		
		//** κ΅¬ν˜„λΆ€μ— return문이 μœ μΌν•˜λ©΄, {}와 return을 μƒλž΅ν•  수 μžˆλ‹€.
		NoParameterReturn pr12 = () -> 200;
		System.out.println("pr12: " + pr12.call());
		
		
		
		//int call(int a, int b);
		ParameterReturn pr13 = (int a, int b) -> {
			return a + b;
		};
		System.out.println("pr13: " + pr13.call(10, 20));
		
		
		ParameterReturn pr14 = (a, b) -> a + b;
		System.out.println("pr14: " + pr14.call(30, 40));
		
		
		
		
		
		
		
	}//main

}//main class


//functional interface
//- 좔상 λ©”μ†Œλ“œλ₯Ό λ”± 1개만 κ°€μ§€λŠ” μΈν„°νŽ˜μ΄μŠ€
interface MyInterface {
	void test();
}

class MyClass implements MyInterface {
	@Override
	public void test() {
		System.out.println("MyClass ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•œ λ©”μ†Œλ“œ");
	}
}


interface TestInterface {
	void aaa();
	void bbb();
}



interface NoParameterNoReturn {
	void call();
}

interface ParameterNoReturn {
	void call(int n);
}

interface MultiParameterNoReturn {
	void call(String name, int age);
}

interface NoParameterReturn {
	int call();
}

interface ParameterReturn {
	int call(int a, int b);
}

 

Ex88

		ArrayList<Integer> list = new ArrayList<Integer>();
		
		for (int i=0; i<20; i++) {
			
			list.add((int)(Math.random() * 100) + 1);
			
		}
		
		System.out.println(list);
		
		
		list.sort(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				
				return o2 - o1;
			}
		});
		System.out.println(list);
		
		//λžŒλ‹€μ‹. μœ„μ™€ λ˜‘κ°™μ€ 식
		list.sort((o1, o2) -> o2 - o1);
		System.out.println(list);