- Today
- Total
- MST
- λ°±μ€
- CS
- database
- λ€μ΅μ€νΈλΌ
- μλ°
- leetcode
- νλ‘κ·Έλλ¨Έμ€
- μμμ λ ¬
- spring
- ꡬν
- pytorch
- λ¬Έλ²
- tree
- OOP
- μλ£κ΅¬μ‘°
- java
- μ‘Έμ μν
- λ°μ΄ν°λ² μ΄μ€
- dp
- 그리λ
- PS
- Algorithm
- array
- 벨λ§ν¬λ
- λ°±μλ
- μΈν΄
- Graph
- BFS
- μλ°μμ μ
Partially Committed
[CH14] Lambda & Stream λ³Έλ¬Έ
λ³Έ ν¬μ€ν μ μλ°μ μ μ κ΅μ¬λ₯Ό 곡λΆνλ©°, κ°λ¨ν μ 리/κΈ°λ‘ μ©λλ‘ μμ±νμμ΅λλ€. νΉμ¬, μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ§μ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
1. Lambda expression
λλ€μμ΄ JDK1.8 μ΄νλ‘ μΆκ°λλ©΄μ κ°μ²΄μ§ν₯μΈμ΄μΈ μλ°μμλ ν¨μν μΈμ΄μ μ₯μ μ μ¬μ©ν μ μκ² λμλ€. Lambda expression μ method λ₯Ό νλμ expression μΌλ‘ ννν κ²μΌλ‘, Lamdba expression(μ΄ν λλ€μ)μ μ¬μ©νλ©΄ method μ μ΄λ¦κ³Ό λ°νκ°μ μμ±ν νμκ° μμ΄ λλ€μμ μ΅λͺ ν¨μ(anonymous function) μ΄λΌκ³ λΆλ₯΄κΈ°λ νλ€.
int method() { return (int)Math.random()*5) + 1; } // before
Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) = 1); // Lambda
λλ€μμ΄ λμ λλ©΄μ method λ₯Ό λ§μΉ λ³μμ²λΌ λ€λ£° μ μκ² λμλ€.
(맀κ°λ³μ μ μΈ) -> { // do something } κ³Ό κ°μ΄ μ μΈν μ μλ€.
[ν¨μν μΈν°νμ΄μ€ ; Functional Interface]
μλ°μμ λͺ¨λ λ©μλλ ν΄λμ€μ ν¬ν¨λμ΄μΌ νλλ°, μ΅λͺ ν΄λμ€μ κ°μ²΄μ κ°μ λλ€μμ ν¨μν μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ€λ£° μ μλ€. λ€λ§ ν¨μν μΈν°νμ΄μ€λ μ€μ§ νλμ abstract method λ§ μ μλμ΄μμ΄μΌ νλ©°, static λ©μλμ default λ©μλλ μμ λ‘κ² μ μν μ μλ€. μ λν μ΄μ @FunctionalInterface λ₯Ό λΆμ΄λ©΄, ν¨μν μΈν°νμ΄μ€λ₯Ό μ μ μνμλμ§ κ²μ¬ν΄μ£Όλ―λ‘ μ μ λν μ΄μ μ νμ©νλλ‘ νμ. κΈ°μ‘΄μλ μΈν°νμ΄μ€μ λ©μλλ₯Ό ꡬννλ €λ©΄ μλμ κ°μ΄ μμ±νμλ€.
List<String> list = Arrays.asList("abc", "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);
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
[ν¨μν μΈν°νμ΄μ€ νμ μ 맀κ°λ³μμ λ°ννμ ]
λ§μ½ MyFunction μ΄ μλμ κ°μ΄ μ μλμ΄ μλ€λ©΄,
@FunctionalInterface
interface MyFunction {
void myMethod();
}
void aMethod(MyFunction f) {
f.myMethod();
}
aMethod μ 맀κ°λ³μκ° ν¨μν μΈν°νμ΄μ€ νμ μ΄λ―λ‘ λλ€μμ μ°Έμ‘°νλ μ°Έμ‘°λ³μλ₯Ό 맀κ°λ³μλ‘ μ§μ ν΄μΌ νλ€.
κ·Έλμ μλμ κ°μ΄ μ¬μ©νκ±°λ,
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
νΉμ μ°Έμ‘°λ³μ μμ΄,
aMethod( ()->System.out.println("myMethod()") );
λΌκ³ μ¬μ©ν μ μλ€.
@FunctionalInterface
interface MyFunction{
void run();
}
class source{
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) {
MyFunction f1 = ()-> System.out.println("f1.run()");
MyFunction f2 = new MyFunction() {
@Override
public void run() {
System.out.println("f2.run()");
}
} ;
MyFunction f3 = getMyFunction();
f1.run();
f2.run();
f3.run();
execute(f1);
execute( ()-> System.out.println("run()") );
}
}
[λλ€μμ νμ κ³Ό νλ³ν]
ν¨μν μΈν°νμ΄μ€λ‘ λλ€μμ μ°Έμ‘°ν μ μμ§λ§ λλ€μμ νμ μ΄ ν¨μν μΈν°νμ΄μ€μ κ°λ€λ κ²μ μλλ©°, λλ€μμ μ΅λͺ κ°μ²΄μ΄λ€.(μ΅λͺ κ°μ²΄λ νμ μ μ»΄νμΌλ¬κ° μ νλλ° μ νν μ μ μμ. λλ€μμ κ²½μ° 'μΈλΆν΄λμ€μ΄λ¦$$Lambda$λ²νΈ' μ κ°μ νμμΌλ‘ λμ΄μμ.) κ·Έλμ μλμ κ°μ΄ νλ³νμ΄ νμνλ€.
MyFunction f = (MyFunction) (()->{}));
λ€λ§ μ νλ³νμ μλ΅μ΄ κ°λ₯νλ€. μ μν μ μ λλ€μμ μ€μ§ ν¨μν μΈν°νμ΄μ€λ‘λ§ νλ³νμ΄ κ°λ₯νλ©°, Object νμ μΌλ‘ νλ³νν μλ μλ€. ( ν¨μν μΈν°νμ΄μ€λ‘ λ³νν λ€μ λ³ννλ©΄ κ°λ₯νκΈ°λ νλ€.)
[컬λ μ νλ μμν¬μ ν¨μν μΈν°νμ΄μ€]
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
class source{
public static void main(String[] args) {
AbstractList<Integer> list = new ArrayList<>();
for (int i = 0; i < 10 ; i++) {
list.add(i);
}
// list μ λͺ¨λ μμ μΆλ ₯
list.forEach(i-> System.out.printf(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 μ λͺ¨λ μμλ₯Ό key, value ννλ‘ μΆλ ₯
map.forEach((k, v)-> System.out.println("{" + k + "," + v + "}"));
System.out.println();
}
}
λλ€μμ μ¬μ©ν λ, ν΄λΉ λλ€μμ΄ νλμ λ©μλλ§ νΈμΆνλ€λ©΄ ν΄λμ€μ΄λ¦::λ©μλμ΄λ¦ νΉμ μ°Έμ‘°λ³μ::λ©μλμ΄λ¦ μΌλ‘ λ°κΏ μ μλ€.
2. μ€νΈλ¦Ό(stream)
μ€νΈλ¦Όμ΄λ,,
References
http://www.yes24.com/Product/Goods/24259565
'π» Study ! > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CH12] Generics, Enumeration, Annotation (0) | 2022.08.30 |
---|---|
[CH11] Collections framework (2) | 2022.08.27 |
[CH09] java.lang ν¨ν€μ§ (0) | 2022.08.21 |
[CH08] μμΈμ²λ¦¬(Exception handling) (0) | 2022.08.02 |
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°4 (OOP) (0) | 2022.08.02 |