-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOptionalProcessingMain.java
More file actions
60 lines (46 loc) · 2.74 KB
/
Copy pathOptionalProcessingMain.java
File metadata and controls
60 lines (46 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package optional;
import javax.swing.text.html.Option;
import java.util.Objects;
import java.util.Optional;
public class OptionalProcessingMain {
public static void main(String[] args) {
Optional<String> optValue = Optional.of("Hello");
Optional<String> optEmpty = Optional.empty();
// 값이 존재하면 Consumer 실행, 없으면 아무 일도 하지 않음
System.out.println("=== 1. isPresent() ===");
optValue.ifPresent(v -> System.out.println("optvalue 값 : " + v));
optEmpty.ifPresent(v -> System.out.println("optEmpty 값 : " + v)); // 실행 x
// 값이 있으면 Consumer 실행, 없으면 Runnable 실행
System.out.println("=== 2. ifPresentOrElse() ===");
optValue.ifPresentOrElse(v -> System.out.println("optValue 값 : " + v),
() -> System.out.println("optValue는 비어있음"));
optEmpty.ifPresentOrElse(v -> System.out.println("optValue 값 : " + v),
() -> System.out.println("optEmpty는 비어있음"));
// 값이 있으면 Funtion 적용 후 Optional로 반환, 없으면 Empty()
System.out.println("=== 3. map() ===");
Optional<Integer> lengthOpt1 = optValue.map(String::length);
System.out.println("optValue.map(String::length) = " + lengthOpt1);
Optional<Integer> lengthOpt2 = optEmpty.map(String::length);
System.out.println("optValue.map(String::length) = " + lengthOpt2);
// map()과 유사하나, 이미 Optional을 반환하는 경우 중첩을 제거
System.out.println("=== 4. flatMap() ===");
Optional<Optional<String>> nestedOpt = optValue.map((s -> Optional.of(s)));
System.out.println("optValue = " + optValue);
System.out.println("nestedOpt = " + nestedOpt);
Optional<String> flattenedOpt = optValue.flatMap(s -> Optional.of(s));
System.out.println("flattenedOpt = " + flattenedOpt);
System.out.println("=== 5. filter() ===");
// 값이 있고 조건을 만족하면 그 값을 그대로, 불만족시 Optional.empty()
Optional<String> filtered1 = optValue.filter(s->s.startsWith("H"));
Optional<String> filtered2 = optValue.filter(s->s.startsWith("X"));
System.out.println("filter(H) = " + filtered1); // Optional[Hello]
System.out.println("filter(X) = " + filtered2); // Optional.empty
System.out.println("=== 6. stream() ===");
// 값이 있으면 단일 요소 스트림, 없으면 빈 스트림
optValue.stream()
.forEach(s -> System.out.println("optValue.stream() -> " + s));
// 값이 없으므로 실행 안됨
optEmpty.stream()
.forEach(s -> System.out.println("optEmpty.stream() -> " + s));
}
}