λλ€μ(Lambda Expression)
JDK1.8λΆν° μΆκ°λ¨
λλ€μμ λμ → μλ° = κ°μ²΄μ§ν₯ μΈμ΄ + ν¨μν μΈμ΄
β» κ°μ²΄μ§ν₯ μΈμ΄μ ν¨μν μΈμ΄λ?
κ°κ° κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° ν¨λ¬λ€μμ μ§μνλ μΈμ΄μ ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ μ§μνλ μΈμ΄
κ°μ²΄μ§ν₯ ν¨λ¬λ€μ
κ°μ λ°μ΄ν°μ λν΄ λ€λ₯Έ μ²λ¦¬ μ μ°¨(λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ°©μ)λ₯Ό μ¬λ¬ κ° λͺ μν΄μΌ νλ κ²½μ°κ° μμ£Ό λ°μνλλ°, μ΄ λ 곡ν΅λ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μ μ°¨λ₯Ό νλλ‘ λ¬Άμ΄ λ°μ΄ν°μ μ¬λ¬ μ μ°¨λ₯Ό νλμ λ¨μλ‘ λ€λ£¨λ ν¨λ¬λ€μμ΄λ€.
ν¨μν ν¨λ¬λ€μ
μ£Όμ΄μ§ λ°μ΄ν°λ₯Ό κ°μΌλ‘ κ°μ£Όνκ³ μλ‘μ΄ κ°μ μμ±νλ ν¨μμ μ΄μ μ λ§μΆ€μΌλ‘μ¨ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν λΆλ΄μ μ κ±°νλ€.
1. λλ€μμ΄λ?
λ©μλλ₯Ό νλμ κ°κ²°ν μ(expression)μΌλ‘ ννν κ²
λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘ λλ€μμ 'μ΅λͺ ν¨μ(anonymous function)'λΌκ³ λ νλ€.
int[] lambdaArr = new int[5];
Arrays.setAll(lambdaArr, (i) -> (int) (Math.random() * 5) + 1);
μ μ½λμμ ( ) -> (int) (Math.random() * 5) + 1μ΄ λ°λ‘ λλ€μμ΄λ€. μ΄ λλ€μμ΄ νλ μΌμ λ©μλλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.
public static int getRandomNum() {
return (int) (Math.random() * 5) + 1;
}
μ΄λ κ² λλ€μμ ν΄λμ€, κ°μ²΄λ₯Ό μμ±νκ³ λ©μλλ₯Ό νΈμΆν νμ μμ΄ λ©μλμ μν μ λμ ν μ μλ€.
λν λλ€μμ λ©μλμ 맀κ°λ³μμ λ°νκ°μ΄ λ μ μμ΄ λ©μλλ₯Ό λ³μμ²λΌ λ€λ£° μ μκ² νλ€.
β» λ©μλμ ν¨μ
λ©μλμ ν¨μλ κ°μ μλ―Έμ§λ§ μ©μ΄λ₯Ό λΆλ¦¬ν΄μ μ¬μ©νλ€. Javaμ λ©μλλ κ°μ²΄μ νμ, λμμ μλ―Ένλ©° νΉμ ν΄λμ€μ λ°λμ μν΄μΌ νλ€λ μ μ½μ΄ μλ€. κ·Έλ¬λ JDK1.8 μ΄ν λλ€μμ λμ μΌλ‘ λ©μλκ° νλμ λ 립μ μΈ κΈ°λ₯μ νκΈ°λλ¬Έμ μ΅λͺ ν¨μλΌλ μ©μ΄λ₯Ό μ¬μ©νλ€.
2. λλ€μ μμ±νκΈ°
λ©μλμ μ΄λ¦κ³Ό λ°ννμ μ μ κ±°νκ³ λ§€κ°λ³μ μ μΈλΆμ body{ } μ¬μ΄μ ->λ₯Ό μΆκ°νλ€.
ReturnType methodName(Parameter p) {
// body
}
βΌ
(Parameter p) -> {
// body
}
# λ κ° μ€μμ ν° κ°μ λ°ννλ λ©μλ max()λ₯Ό λλ€μμΌλ‘ λ³ννκΈ°
int max(int a, int b) {
return a > b ? a : b;
}
βΌ
(int a, int b) -> {
return a > b ? a : b;
}
returnλ¬Έ λμ μ(expression)μΌλ‘ λμ ν μ μλ€. μμ μ°μ° κ²°κ³Όκ° μλμΌλ‘ λ°νκ°μ΄ λλ€. λ¬Έμ₯(statement)μ΄ μλλ―λ‘ λμ μΈλ―Έμ½λ‘ (;)μ λΆμ΄μ§ μλλ€.
βΌ
(int a, int b) -> a > b ? a : b
맀κ°λ³μμ νμ μ μΆλ‘ μ΄ κ°λ₯ν κ²½μ°(λλΆλΆμ κ²½μ°) μλ΅ κ°λ₯νλ€. μ°Έκ³ λ‘ λ°ννμ μ μ κ±°ν μ μλ μ΄μ λ νμ μΆλ‘ κ°λ₯νκΈ° λλ¬Έμ΄λ€.
βΌ
(a, b) -> a > b ? a : b
μ΅μ’ λ³ν κ²°κ³Ό
3. λλ€μ μμ± λ¬Έλ² μ 리
μ μμμ μ¬μ©λ μμ± κ·μΉ μΈμλ λͺ κ°μ§ μΆκ°μ μΈ κ·μΉμ΄ μ‘΄μ¬νλ€. κ·Έ λ¬Έλ²μ μ 리νλ©΄ λ€μκ³Ό κ°λ€.
1. κΈ°λ³Έμ μΈ μμ± κ·μΉ
- μ΄λ¦κ³Ό λ°ννμ μ μμ±νμ§ μλλ€. (anonymous function)
2. 맀κ°λ³μ
- μΆλ‘ μ΄ κ°λ₯ν 맀κ°λ³μμ νμ μ μλ΅ν μ μλ€.
- λ¨, 맀κ°λ³μκ° λ κ° μ΄μμΌ κ²½μ° μΌλΆμ νμ λ§ μλ΅νλ κ²μ νμ©λμ§ μλλ€.
- μ μΈλ 맀κ°λ³μκ° νλμΈ κ²½μ° κ΄νΈ( )λ₯Ό μλ΅ν μ μλ€.
- λ¨, 맀κ°λ³μμ νμ μ μμ±ν κ²½μ°μ 맀κ°λ³μκ° νλλΌλ κ΄νΈ( )λ₯Ό μλ΅ν μ μλ€.
3. body { }
- returnλ¬Έ(return statement) λμ μ(expression)μΌλ‘ λ체ν μ μλ€.
- μ(expression)μ λμ μΈλ―Έμ½λ‘ (;)μ λΆμ΄μ§ μλλ€.
- κ΄νΈ{ } μμ λ¬Έμ₯μ΄ νλμΌ λλ κ΄νΈ{ }λ₯Ό μλ΅ν μ μλ€.
- μ΄ λ, λ¬Έμ₯μ λμ μΈλ―Έμ½λ‘ (;)μ λΆμ΄μ§ μλλ€.
- κ·Έλ¬λ returnλ¬Έμ κ΄νΈλ₯Ό μλ΅ν μ μλ€.
4. λ©μλ -> λλ€μ λ³ν μμ
λ€μμ λ©μλλ₯Ό λλ€μμΌλ‘ λ³νν μμ μ΄λ€.
# μμ 1
int max(int a, int b) {
return a > b ? a : b;
}
βΌ
(a, b) -> a > b ? a : b
# μμ 2
void printVar(String name, int i) {
System.out.println(name + " = " + i);
}
βΌ
(name, i) -> System.out.println(name + " = " + i)
# μμ 3
int square(int x) {
return x * x;
}
βΌ
x -> x * x
# μμ 4
int roll() {
return (int) (Math.random() * 6);
}
βΌ
( ) -> (int) (Math.random() * 6)
# μμ 5
int sumArr(int[] arr) {
int sum = 0;
for(int i: arr) {
sum += i;
}
return sum;
}
βΌ
(int[] arr) -> {
int sum = 0;
for(int i: arr) {
sum += i;
return sum;
}
5. ν¨μν μΈν°νμ΄μ€(Functional Interface)
ν¨μν μΈν°νμ΄μ€λ λλ€μμ λ€λ£¨λ μΈν°νμ΄μ€μ΄λ€. @FunctionalInterface μ΄λ Έν μ΄μ μ μ¬μ©νλ€.
λλ€μμ μ€μ λ‘λ λ©μλ κ·Έ μμ²΄κ° μλλΌ μ΅λͺ ν΄λμ€μ κ°μ²΄μ λλ±νλ€. μ΅λͺ κ°μ²΄μ λ©μλμ λλ€μμ 맀κ°λ³μ, λ°νκ°μ΄ μΌμΉνλ©΄ μ΅λͺ κ°μ²΄λ₯Ό λλ€μμΌλ‘ λ체ν μ μλ€.
@FunctionalInterface
interface MyFunction {
public abstract int max(int a, int b);
}
MyFunction μΈν°νμ΄μ€
MyFunction μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ ν΄λμ€μ κ°μ²΄λ μλμ κ°μ΄ μμ±ν μ μλ€. (κΈ°μ‘΄ λ°©μ)
MyFunction f = new MyFunction() { // MyFunction μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ
ν΄λμ€μ κ°μ²΄ μμ±
public int max(int a, int b) {
return a > b ? a : b
}
};
int big = f.max(5, 3); // μ΅λͺ
κ°μ²΄μ λ©μλ νΈμΆ
κ·Έλ°λ° λλ€μμ μ΅λͺ κ°μ²΄μ λλ±νλ―λ‘ μλμ κ°μ΄ λ체ν μ μλ€.
βΌ
MyFunction f = (a, b) -> a > b ? a : b; // μ΅λͺ
κ°μ²΄λ₯Ό λλ€μμΌλ‘ λ체
int big = f.max(5, 3); // μ΅λͺ
κ°μ²΄μ λ©μλ νΈμΆ
μ΄λ κ² λλ€μμΌλ‘ μΈν°νμ΄μ€μ μΆμλ©μλλ₯Ό ꡬνν μ μκ³ , λλ€μμ μ°Έμ‘°λ³μλ‘ λ€λ£° μ μλ€.
- ν¨μν μΈν°νμ΄μ€μλ λλ€μκ³Ό 1:1λ‘ μ°κ²°λ μ μλλ‘ νλμ μΆμ λ©μλλ§ μ μν΄μΌνλ€.
- λ¨, static λ©μλμ default λ©μλμ κ°μμλ μ μ½μ΄ μλ€.
β» λλ€μ Comparator μΈν°νμ΄μ€ compare() ꡬν μμ
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, new Comparator<String>() {
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
});
βΌ
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
# ν¨μν μΈν°νμ΄μ€ νμ μ 맀κ°λ³μμ 리ν΄νμ
λ©μλμ 맀κ°λ³μλ₯Ό ν¨μν μΈν°νμ΄μ€ νμ μΌλ‘ μ μΈν¨μΌλ‘μ¨
1. λλ€μμ μ°Έμ‘°νλ μ°Έμ‘°λ³μλ₯Ό 맀κ°λ³μλ‘ μ§μ νκ±°λ
2. λλ€μμ μ§μ 맀κ°λ³μλ‘ μ§μ ν μ μλ€.
@FunctionalInterface
interface MyFunction {
void myMethod();
}
class Main {
static void aMethod(MyFunction f) { // ν¨μν μΈν°νμ΄μ€ νμ
μ 맀κ°λ³μ
f.myMethod();
}
public static void main(String[] args) {
MyFunction f = ( ) -> System.out.println("myMethod()");
aMethod(f); // 맀κ°λ³μ μ§μ λ°©λ²1 - μ°Έμ‘°λ³μ μ§μ
aMethod(( ) -> System.out.println("myMethod()")); // 맀κ°λ³μ μ§μ λ°©λ²2 - λλ€μ μ§μ μ§μ
}
}
λ©μλμ 리ν΄νμ μ ν¨μν μΈν°νμ΄μ€ νμ μΌλ‘ μ§μ ν¨μΌλ‘μ¨
1. ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλμ λλ±ν λλ€μμ κ°λ¦¬ν€λ μ°Έμ‘°λ³μλ₯Ό λ°ννκ±°λ
2. λλ€μμ μ§μ λ°νν μ μλ€.
MyFunction myMethod() {
MyFunction f = ( ) -> { };
return f;
}
MyFunction myMethod() {
return ( ) -> { };
}
μ΄λ κ² λλ€μμ μ°Έμ‘°λ³μλ‘ λ€λ£°μ μκ³ λ©μλλ₯Ό ν΅ν΄ λλ€μμ μ£Όκ³ λ°μ μ μλ€.
# μμ
@FunctionalInterface
interface MyFunction {
void run();
}
public class LambdaEx1 {
static void execute(MyFunction f) {
f.run();
}
static MyFunction getMyFunction() {
MyFunction f = () -> System.out.println("f3.run()");
return f;
}
public static void main(String[] args) {
// 1. μ΅λͺ
ν΄λμ€λ‘ MyFunction.run() ꡬν(κΈ°μ‘΄ λ°©μ)
MyFunction f1 = new MyFunction() {
@Override
public void run() {
System.out.println("f2.run()");
}
};
// 2. λλ€μμΌλ‘ MyFunction.run() ꡬν
MyFunction f2 = () -> System.out.println("f1.run()");
// 3. λλ€μμ λ°ννλ λ©μλ νΈμΆ
MyFunction f3 = getMyFunction();
f1.run();
f2.run();
f3.run();
execute(f2); // 1. λλ€μμ μ°Έμ‘°νλ μ°Έμ‘°λ³μλ₯Ό 맀κ°λ³μλ‘ μ§μ
execute(() -> System.out.println("run()")); // 2. λλ€μμ μ§μ 맀κ°λ³μλ‘ μ§μ
}
}
6. λλ€μμ νμ κ³Ό νλ³ν
λλ€μμ μ΅λͺ κ°μ²΄μ΄κ³ μ΅λͺ κ°μ²΄λ νμ μ΄ μλ€.(μ ννλ μ»΄νμΌλ¬κ° μμλ‘ μ΄λ¦μ μ νκΈ°λλ¬Έμ μ μ μλ€.) ν¨μν μΈν°νμ΄μ€ νμ μ°Έμ‘°λ³μλ‘ λλ€μμ μ°Έμ‘°ν μ μλ κ²μΌ λΏ, λλ€μμ νμ μ΄ ν¨μν μΈν°νμ΄μ€μ νμ κ³Ό μΌμΉνλ κ²μ μλλ€.
MyFunction f = (MyFunction) (() -> {});
κ·Έλμ μλλ μμ κ°μ΄ νλ³νμ΄ νμνλ°, μ΄λ μλ΅μ΄ κ°λ₯νλ€. λλ€μμ΄ MyFunction μΈν°νμ΄μ€λ₯Ό μ§μ ꡬννμ§ μμ§λ§ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ κ°μ²΄μ μμ ν λμΌνκΈ° λλ¬Έμ μ΄λ¬ν νλ³νμ νμμλ€.
λλ€μμ Object νμ μΌλ‘ νλ³νν μ μλ€. κ΅³μ΄ νλ €λ©΄ λ¨Όμ ν¨μν μΈν°νμ΄μ€λ‘ λ³νν΄μΌ νλ€.
Object obj = (Object) (()->{}); // μλ¬
Object obj = (Object) (MyFunction) (()->{}); // κ°λ₯
String str = ((Object) (MyFunction) (()->{})).toString(); // κ°λ₯
# μμ
@FunctionalInterface
interface MyFunction {
void myMethod();
}
public class LambdaEx2 {
public static void main(String[] args) {
// MyFunction f = (MyFunction) (()->{});
MyFunction f = ()->{};
// Object obj = (Object) (MyFunction) (()->{});μ λμΌ. (Object) μλ΅
Object obj = (MyFunction) (()->{});
// String str = ((Object) (MyFunction) (()->{})).toString();μ λμΌ
String str = ((MyFunction) (()->{})).toString();
System.out.println(f);
System.out.println(obj);
System.out.println(str);
// μλ¬. λλ€μμ Object νμ
μΌλ‘ νλ³ν μλ¨
// System.out.println(()->{});
// OK
System.out.println((MyFunction) (()->{}));
// μλ¬
// System.out.println((MyFunction) (()->{}).toString());
// OK
System.out.println(((MyFunction) (()->{})).toString());
}
}
μ€ν κ²°κ³Ό
com.atoz_develop.LambdaEx2$$Lambda$14/0x0000000100066840@6e8dacdf com.atoz_develop.LambdaEx2$$Lambda$15/0x0000000100066c40@7a79be86 com.atoz_develop.LambdaEx2$$Lambda$16/0x0000000100066040@1e643faf com.atoz_develop.LambdaEx2$$Lambda$17/0x0000000100066440@b684286 com.atoz_develop.LambdaEx2$$Lambda$18/0x0000000100065840@3f3afe78
λλ€μμ νμ μ μΌλ°μ μΈ μ΅λͺ κ°μ²΄μ λ¬λ¦¬ 'μΈλΆν΄λμ€μ΄λ¦$$Lambda$λ²νΈ'μ κ°μ νμμΌλ‘ κ²°μ λλ€.
7. λλ€μμ μΈλΆ λ³μ μ°Έμ‘°
@FunctionalInterface
interface MyFunction {
void myMethod();
}
class Outer {
int val = 10; // Outer.this.val
class Inner {
int val = 20; // this.val
void method(int i) { // void method(final int i)
int val = 30; // final int val = 30;
// i = 10; // final κ° λ³κ²½ λΆκ°
MyFunction f = () -> {
System.out.println("i: " + i);
System.out.println("val: " + val);
System.out.println("this.val: " + ++this.val); // μΈμ€ν΄μ€ λ³μλ μμλ‘ κ°μ£Όλμ§ μμΌλ―λ‘ λ³κ²½ κ°λ₯
System.out.println("Outer.this.val: " + ++Outer.this.val); // μΈμ€ν΄μ€ λ³μλ μμλ‘ κ°μ£Όλμ§ μμΌλ―λ‘ λ³κ²½ κ°λ₯
};
f.myMethod();
}
}
}
public class LambdaEx3 {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.method(100);
}
}
μ€ν κ²°κ³Ό
i: 100
val: 30
this.val: 21
Outer.this.val: 11
μ΄ μμ λ λλ€μ λ΄μμ μΈλΆμ μ μΈλ λ³μμ μ κ·Όνλ λ°©λ²μ 보μ¬μ€λ€. λλ€μ λ΄μμ μ°Έμ‘°νλ μ§μλ³μλ finalμ΄ λΆμ§ μμμ΄λ μμ(final)λ‘ κ°μ£Όλλ€. λλ€μ λ΄μμ μ§μλ³μ iμ valμ μ°Έμ‘°νκ³ μμΌλ―λ‘ λλ€μ λ΄μμλ λ€λ₯Έ μ΄λκ³³μμλ μ΄ λ³μλ€μ κ°μ λ³κ²½ν μ μλ€.
λ°λ©΄ Innerν΄λμ€μ Outerν΄λμ€μ μΈμ€ν΄μ€ λ³μμΈ this.valκ³Ό Outer.this.valμ μμλ‘ κ°μ£Όλμ§ μμΌλ―λ‘ κ°μ λ³κ²½ν μ μλ€.
void method(int i) {
int val = 30;
MyFunction f = (i) -> { // μλ¬: μΈλΆ μ§μλ³μμ μ΄λ¦ μ€λ³΅
System.out.println("i: " + i);
System.out.println("val: " + val);
System.out.println("this.val: " + ++this.val);
System.out.println("Outer.this.val: " + ++Outer.this.val);
};
f.myMethod();
}
κ·Έλ¦¬κ³ μΈλΆ μ§μλ³μμ κ°μ μ΄λ¦μ λλ€μ 맀κ°λ³μλ νμ©λμ§ μλλ€.
8. java.util.function ν¨ν€μ§
java.util.function ν¨ν€μ§μ μμ£Ό μ°μ΄λ νμμ λ©μλκ° ν¨μν μΈν°νμ΄μ€λ‘ 미리 μ μλμ΄ μλ€. λ§€λ² μλ‘μ΄ ν¨μν μΈν°νμ΄μ€λ₯Ό μ μνλ κ² λ³΄λ€ μ΄ ν¨ν€μ§μ μΈν°νμ΄μ€λ₯Ό νμ©νμ.
ν¨μν μΈν°νμ΄μ€ | λ©μλ | μ€λͺ |
java.lang.Runnable | void run() | 맀κ°λ³μλ μκ³ λ°νκ°λ μμ |
Supplier | T get() | 맀κ°λ³μλ μκ³ λ°νκ°λ§ μμ |
Consumer | void accept(T t) | 맀κ°λ³μλ§ μκ³ λ°νκ°μ μμ |
Function | R apply(T t) | μΌλ°μ μΈ ν¨μ. νλμ 맀κ°λ³μλ₯Ό λ°μμ κ²°κ³Όλ₯Ό λ°ν |
Predicate | boolean test(T t) | 쑰건μ ννμ μ¬μ© 맀κ°λ³μλ νλ, λ°ν νμ μ boolean |
ν - μ£Όμ ν¨μν μΈν°νμ΄μ€
# 쑰건μμ ννμ μ¬μ©λλ Predicate
Predicateλ Functionμ λ³νμΌλ‘ λ°ννμ μ΄ booleanμ΄λΌλ κ²λ§ λ€λ₯΄λ€. 쑰건μμ λλ€μμΌλ‘ νννλλ° μ¬μ©λλ€.
Predicate<String> isEmptyStr = s -> s.length() == 0;
String s = "";
if(isEmptyStr.test(s)) {
System.out.println("This is an empty String");
}
# 맀κ°λ³μκ° λ κ°μΈ ν¨μν μΈν°νμ΄μ€
ν¨μν μΈν°νμ΄μ€ | λ©μλ | μ€λͺ |
BiConsumer<T, U> | void accept(T t, U u) | λ κ°μ 맀κ°λ³μλ§ μκ³ λ°νκ° μμ |
BiPredicate<T, U> | boolean test(T t, U u) | 쑰건μ ννμ μ¬μ© 맀κ°λ³μ λ, λ°νκ°μ boolean |
BiFunction<T, U, R> | R apply<T t, U u> | λ κ°μ 맀κ°λ³μλ₯Ό λ°μμ νλμ κ²°κ³Όλ₯Ό λ°ν |
맀κ°λ³μκ° μΈ κ° μ΄μμΈ ν¨μν μΈν°νμ΄μ€κ° νμνλ©΄ μλμ κ°μ΄ μ§μ λ§λ€μ΄μΌ νλ€.
@FunctionalInterface
interface TriFunction<T, U, V, R> {
R apply(T t, U u, V v);
}
μΈ κ°μ 맀κ°λ³μλ₯Ό λ°μμ νλμ κ²°κ³Όλ₯Ό λ°ννλ ν¨μν μΈν°νμ΄μ€ μ
# UnaryOperatorμ BinaryOperator
Functionμ λ λ€λ₯Έ λ³νμΌλ‘ 맀κ°λ³μμ νμ κ³Ό λ°ν νμ μ΄ μΌμΉνλ€.
ν¨μν μΈν°νμ΄μ€ | λ©μλ | μ€λͺ |
UnaryOperator<T> | T apply(T t) | Functionμ μμ 맀κ°λ³μμ 리ν΄κ°μ νμ μ΄ κ°λ€. |
BinaryOperator<T> | T apply(T t, T t) | BiFunctionμ μμ 맀κ°λ³μμ 리ν΄κ°μ νμ μ΄ κ°λ€. |
# 컬λ μ νλ μμκ³Ό ν¨μν μΈν°νμ΄μ€
컬λ μ νλ μμμ μΈν°νμ΄μ€μ μΆκ°λ λν΄νΈ λ©μλ μ€ μΌλΆλ ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€.
public class LambdaEx4 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i=0; i<10; i++) {
list.add(i);
}
// listμ λͺ¨λ μμλ₯Ό μΆλ ₯
list.forEach(i-> System.out.print(i+","));
System.out.println();
// listμμ 2 λλ 3μ λ°°μ μ κ±°
list.removeIf(x->x%2==0 || x%3==0);
System.out.println(list);
// listμ κ° μμμ 10μ κ³±νλ€
list.replaceAll(i->i*10);
System.out.println(list);
Map<String, String> map = new HashMap<>();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
map.put("4", "4");
// mapμ λͺ¨λ μμλ₯Ό {k, v}μ νμμΌλ‘ μΆλ ₯νλ€.
map.forEach((k, v)-> System.out.printf("{"+k+","+v+"},"));
System.out.println();
}
}
μ€ν κ²°κ³Ό
0,1,2,3,4,5,6,7,8,9,
[1, 5, 7]
[10, 50, 70]
{1,1},{2,2},{3,3},{4,4},
'JavaΒ·ο»ΏServletΒ·ο»ΏJSP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΄ν΄λ¦½μ€μμ κΉνλΈ μ μ₯μ 볡μ λ° νλ‘μ νΈ μν¬νΈνλ λ°©λ² (1) | 2020.02.01 |
---|---|
[JAVA] static import문 (0) | 2020.01.29 |
[JAVA] Array -> List, Set λ³ν λ°©λ² (0) | 2020.01.15 |
[JAVA] List κ°μ²΄ λ³΅μ¬ λ°©λ²κ³Ό Collections.copy()μ κ΄ν κ³ μ°° (1) | 2020.01.09 |
JAVA 8 λ³κ²½ μ¬ν - interfaceμ default ν€μλμ static λ©μλ (0) | 2020.01.02 |
λκΈ