JAVA

[JAVA] .stream() 을 사용했는데 순서가 유지되지 않는 경우

오선지♬ 2025. 1. 23. 20:24
728x90
반응형

 

왜 순서가 깨질 수 있나요?

  1. Collectors.toMap:
    • 기본적으로 toMap은 내부적으로 HashMap을 사용합니다.
    • HashMap은 요소가 삽입된 순서를 보장하지 않습니다. 따라서 스트림 소스의 순서가 HashMap을 거치면서 깨질 수 있습니다.
  2. 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
반응형