토이 프로젝트에서 사용자 리스트 중 특정 ID를 가진 사용자를 필터링하여 조회하려 합니다.
코드:
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User(1L, "User1"),
new User(2L, "User2")
);
Long targetId = 3L;
Optional<User> result = users.stream()
.filter(u -> u.getId().equals(targetId))
.findFirst();
System.out.println("Result: " + result.isPresent());
}
}
class User {
private Long id;
private String name;
public User(Long id, String name) { this.id = id; this.name = name; }
public Long getId() { return id; }
}
오류: Result: false
시도: filter 내부의 equals 비교 로직 확인 및 targetId 값의 타입 일치 여부 검토.
질문: 조건에 맞는 요소가 없을 때 findFirst()가 예외를 던지지 않고 Optional.empty()를 반환하는 것이 정상 동작인지, 혹은 스트림 파이프라인 구성상의 설정 누락이 있는지 확인 부탁드립니다.
댓글5
-
빗방울
2026.10.30 11:10
-
빗방울
2026.10.30 11:25
근데 3L 찾으시는데 리스트엔 1, 2밖에 없어서 당연히 안 나오는 거 아님?ㅋㅋ
데이터부터 확인해보세요ㄷㄷ
-
빗방울
2026.10.30 11:37
이거 나중에 실무 가면
데이터 없을 때 처리하는 게 더 일임ㅋㅋ 그냥 맘 편하게 ifPresent나 map으로 후속 처리 하세요.
-
빗방울
2026.10.30 13:13
이거 나중에 데이터 많아지면 findFirst 대신 findAny 쓰는 게 성능상 유리할 수도 있음ㅋㅋ 한번 찾아보세요.
-
빗방울
2026.10.30 15:29
병렬 스트림 쓸 때는 findAny가 확실히 빠르긴 하죠ㅋㅋ
근데 여기선 그냥 순차 스트림이라 체감 안 될 듯함ㄷㄷ
모든 이야기1457
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1457개의 이야기
정상 동작 맞음ㅋㅋ
원래 없으면 empty 주는 게 Optional 설계 의도임.
orElse나 orElseThrow로 처리하시면 될 듯함.