Lamda ํํ์
- ๋๋ค์์ JAVA 8์ ๋์ ๋ ํจ์(๋ฉ์๋)๋ฅผ ๊ฐ๋จํ ์์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ต๋ช ํจ์(anonymous function)๋ฅผ ์์ฑํ๊ธฐ ์ํ ์์ด๋ค.
- ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ณด๋ค๋ ํจ์ ์งํฅ ์ธ์ด์ ๊ฐ๊น๋ค.
<ํจ์์ ๋ฉ์๋์ ์ฐจ์ด>
ํจ์ | ๋ฉ์๋ |
ํด๋์ค์ ๋ ๋ฆฝ์ | ํด๋์ค์ ์ข ์์ |
์ผ๋ฐ์ ์ธ ์ฉ์ด | ๊ฐ์ฒด์งํฅ ๊ฐ๋ ์ฉ์ด |
Lamda์ ๊ธฐ๋ณธ ์์ฑ ๋ฐฉ๋ฒ
(์ธ์) -> {์ฒ๋ฆฌ}
()-> {์ฒ๋ฆฌ}
(์ธ์) -> ์ฒ๋ฆฌ
(์ธ์) -> {return 0;}
int max(int a, int b) {
retrun a > b ? a : b;
}
↓
๋ฉ์๋์ ์ด๋ฆ๊ณผ ๋ฐํ ํ์ ์ ์ ๊ฑฐ ํ ' -> ' ์ถ๊ฐ
(a, b) -> a > b ? a : b
List์์ Lamda์ฌ์ฉ
Java 7 ์ดํ : for๋ฌธ ์ฌ์ฉ
List<Map<String, Object>> list = ...service.select..(map);
for (Map<String, Object> string : list) {
System.out.println( "string :: " + string);
}
Java 8 ์ด์ : Lambda ์ฌ์ฉ
List<Map<String, Object>> list = ...service.select..(map);
list.forEach(string -> System.out.println( "string :: " + string));
๋์ผํ ๊ฒฐ๊ณผ
string :: {SEQNUM=1, APP_NAM=ํธ๋ฃจ์ฝ๋ฉ1, IST_YMD=20200101}
string :: {SEQNUM=2, APP_NAM=ํธ๋ฃจ์ฝ๋ฉ2, IST_YMD=20200102}
string :: {SEQNUM=3, APP_NAM=ํธ๋ฃจ์ฝ๋ฉ3, IST_YMD=20200103}
string :: {SEQNUM=4, APP_NAM=ํธ๋ฃจ์ฝ๋ฉ4, IST_YMD=20200104}
- Lambda ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ์๋๊ฐ ๋ช ํํ๊ฒ ๋๋ฌ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
๋ฐฐ์ด์์ Lamda์ฌ์ฉ
String[] stringArray = { "truena", "truema", "trueda" };
Arrays.asList(stringArray).forEach(string -> System.out.println(string));
map์์ Lamda์ฌ์ฉ
Java 7 ์ดํ : for๋ฌธ ์ฌ์ฉ
HashMap<String, Object> doc = new HashMap<String, Object>();
doc.put("name", "true");
doc.put("age", "27"));
for(Entry<String, Object> entry : doc.entrySet()) {
System.out.println(" mapKey ::" + entry.getKey());
System.out.println(" mapValue ::" + entry.getValue());
}
Java 8 ์ด์ : Lambda ์ฌ์ฉ
HashMap<String, Object> doc = new HashMap<String, Object>();
doc.put("name", "true");
doc.put("age", "27"));
doc.forEach((key, value) -> {
System.out.println(" mapKey ::" + key);
System.out.println(" mapValue ::" + value);
});
๋์ผํ ๊ฒฐ๊ณผ
mapKey :: name
mapValue :: true
mapKey :: age
mapValue :: 27
Lamda ์ฅ/๋จ์
์ฅ์ | ๋จ์ |
์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค. | Lamda๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ง๋ ๋ฌด๋ช ํจ์๋ ์ฌ์ฌ์ฉ ๋ถ๊ฐ |
์๋๊ฐ ๋ช ํํ ๋๋ฌ๋ ๊ฐ๋ ์ฑ ํฅ์ | ๋๋ฒ๊น ์ด ๊น๋ค๋กญ๋ค. |
์ฝ๋ฉ ์๊ฐ์ ๋จ์ถ | ๋น์ทํ ํจ์๋ฅผ ๊ณ์ ์ค๋ณต ์์ฑํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง ์ ์๋ค. |
๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ฉ์ด | ์ฌ๊ท๋ก ๋ง๋ค๊ฒฝ์ฐ๋ ๋ถ์ ํฉํ๋ฉด์ด ์๋ค. |
** ํจ์ํ ์ธํฐํ์ด์ค Lamda ํํ์ ๋ฌธ๋ฒ ์์
/* ๋๊ฐ์ ์ซ์ ๋ํ๊ธฐ */
@FunctionalInterface // ํจ์ํ ์ธํฐํ์ด์ค๋ ๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ๊ฐ์ ธ์ผํ๋ค.
interface Compare{
public int compareTo(int a, int b);
}
public class Ramda2 {
public static void exec(Compare com) {
int k = 10;
int m = 20;
// ํจ์ํ ์ธํฐํ์ด์ค
int value = com.compareTo(k, m);
System.out.println(value);
}
public static void main(String[] args) {
//๋๋ค์ ๋ฌธ๋ฒ (๋งค๊ฐ๋ณ์ ๋ชฉ๋ก)->{์คํ๋ฌธ}
exec((i,j)->{
return i+j;
});
}
}
์ฐธ๊ณ :
[Java] ๋๋ค์(Lambda Expressions) -> ์ฌ์ฉ๋ฒ & ์์
๋๋ค์์ด๋? ๋๋ค์์ด๋ "์๋ณ์์์ด ์คํ๊ฐ๋ฅํ ํจ์" ํจ์์ธ๋ฐ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ ์ฝ๋ํ์ค์ ํจ์๋ฅผ ์จ์ ๊ทธ๊ฒ์ ํธ์ถํ๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋๊ฒ ์ต๋๋ค. ํจ์์ ํ๋ก๊ทธ๋๋ฐ์
coding-factory.tistory.com
ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ง์ ๊ณต์ , devkuma
๋ฐ๋ธ์ฟ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ์ ๋ํ ์ง์์ ๊ณต์ ํฉ๋๋ค.
www.devkuma.com
[Java] ๋๋ค์(Lambda Expression)๊ณผ ํจ์ํ ์ธํฐํ์ด์ค(Functional Interface) (2/5)
1. ๋๋ค์(Lambda Expression) ์ด๋? Stream ์ฐ์ฐ๋ค์ ๋งค๊ฐ๋ณ์๋ก ํจ์ํ ์ธํฐํ์ด์ค(Functional Interface)๋ฅผ ๋ฐ๋๋ก ๋์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ค์์ ๋ฐํ๊ฐ์ผ๋ก ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ
mangkyu.tistory.com