Data.java
@Getter
@Builder
class Data {
private final String no;
private final String data;
}
list(Data): [{"1", "동동"}, {"2", "은동"}, {"1", "포동"}, {"4", "규동"}, {"1", "우동"}]
객체와 List가 위와 같을 때,
1. findFirst
String result1 = Optional.of(list)
.orElse(Collections.emptyList())
.stream()
.filter(l -> StringUtils.equals("1", l.getNo()))
.findFirst()
.map(Data::getData)
.orElse(null);
{"1", "동동"}, {"1", "포동"}, {"1", "우동"}
중{"1", "동동"}
출력2. findAny
String result2 = Optional.of(list)
.orElse(Collections.emptyList())
.stream()
.filter(l -> StringUtils.equals("1", l.getNo()))
.findAny()
.map(Data::getData)
.orElse(null);
findFirst
와 동일) 3. findLast (reduce)
String result3 = Optional.of(list)
.orElse(Collections.emptyList())
.stream()
.filter(l -> StringUtils.equals("1", l.getNo()))
.reduce((first, second) -> second)
.map(Data::getData)
.orElse(null);
{"1", "동동"}, {"1", "포동"}, {"1", "우동"}
중{"1", "우동"}
출력