728x90
반응형
왜 순서가 깨질 수 있나요?
- Collectors.toMap:
- 기본적으로 toMap은 내부적으로 HashMap을 사용합니다.
- HashMap은 요소가 삽입된 순서를 보장하지 않습니다. 따라서 스트림 소스의 순서가 HashMap을 거치면서 깨질 수 있습니다.
- values():
- HashMap의 values() 메서드는 순서를 보장하지 않기 때문에, 반환된 Collection의 순서도 불확실합니다.
순서를 유지하려면 어떻게 해야 하나요?
순서를 유지하려면 LinkedHashMap을 사용해야 합니다. LinkedHashMap은 삽입 순서를 보장합니다.
이를 위해 toMap 대신 Collectors.toMap에 LinkedHashMap을 명시적으로 지정하면 됩니다.
// 순서를 유지하며 exhlNm 리스트 생성
List<String> exhlNmList = crItemList.stream()
.collect(Collectors.toMap(
ResCrItemListDTO::getExhlCd, // Key: exhlCd
ResCrItemListDTO::getExhlNm, // Value: exhlNm
(existing, replacement) -> existing, // 중복 시 기존 값 유지
LinkedHashMap::new // 순서 유지
))
.values()
.stream()
.collect(Collectors.toList());
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 스트림에서 데이터를 정렬하기 (0) | 2025.01.21 |
---|---|
[JAVA] Collectors.toMap을 사용해 중복 제거 (0) | 2025.01.20 |
[JAVA] Collectors.joining (0) | 2025.01.19 |
[JAVA] boolean / Boolean (0) | 2025.01.12 |
[JAVA] BeanUtils.copyProperties 주의사항 (0) | 2025.01.08 |