728x90
반응형
Java에서 stream().collect(Collectors.toList())와 stream().toList()는 스트림을 리스트로 변환하는 두 가지 방법입니다. JDK 16에서 Stream.toList() 메서드가 도입되었으며, 이 메서드와 Collectors.toList() 메서드 간의 차이점은 다음과 같습니다.
stream().collect(Collectors.toList())
- 가변 리스트 반환
- stream().collect(Collectors.toList())는 가변 리스트를 반환합니다. 즉, 반환된 리스트는 수정할 수 있습니다.
- 유연성
- Collectors.toList()는 더 많은 유연성을 제공합니다. 커스터마이징이 필요한 경우 다른 Collector와 결합하여 사용할 수 있습니다.
- JDK 8 이상에서 사용
/** Using stream().collect(Collectors.toList()) */
List<String> mutableList = Stream.of("a", "b", "c").collect(Collectors.toList());
System.out.println("Mutable List: " + mutableList);
// Mutable List: [a, b, c]
/** Modifying the list is allowed */
mutableList.add("d");
System.out.println("Modified Mutable List: " + mutableList);
// Modified Mutable List: [a, b, c, d]
stream().toList()
- 불변 리스트 반환
- stream().toList()는 불변 리스트를 반환합니다. 즉, 반환된 리스트는 수정할 수 없습니다.
- 성능 최적화
- 내부적으로 최적화되어 있으며, 필요한 경우 더 적은 메모리를 사용할 수 있습니다.
- JDK 16 이상에서만 사용
/** Using stream().toList() */
List<String> immutableList = Stream.of("a", "b", "c").toList();
System.out.println("Immutable List: " + immutableList);
// Immutable List: [a, b, c]
/** Attempting to modify the list will throw UnsupportedOperationException */
// immutableList.add("d"); // Uncommenting this line will cause an exception
위와 같은 차이점으로 JSON 직렬화 시 데이터 형태가 다릅니다.
collect(Collectors.toList())는 JSON 직렬화 시 클래스 정보가 포함될 수 있고, stream().toList()는 클래스 정보가 포함되지 않으며, 더 간결한 JSON 형식을 가질 수 있습니다.
/** collect(Collectors.toList()) */
["java.util.ArrayList", ["a","b","c"]]
/** stream().toList() */
["a","b","c"]
Jackson의 ObjectMapper 설정을 통해 클래스 정보가 포함되지 않도록 할 수 있습니다.
Stram stream = Stream.of("a", "b", "c");
/** Using collect(Collectors.toList()) */
List<String> mutableList = stream.collect(Collectors.toList());
System.out.println("Mutable List: " + mutableList);
// Mutable List: [a, b, c]
/** Configure ObjectMapper without type information */
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
/** Serialize to JSON */
String json = objectMapper.writeValueAsString(mutableList);
System.out.println("Serialized JSON without type information (collect(Collectors.toList())): " + json);
// Serialized JSON without type information (collect(Collectors.toList())): ["a","b","c"]
/** Using stream().toList() */
List<String> immutableList = stream.toList();
System.out.println("Immutable List: " + immutableList); // Immutable List: [a, b, c]
/** Serialize to JSON */
json = objectMapper.writeValueAsString(immutableList);
System.out.println("Serialized JSON with stream().toList(): " + json);
// Serialized JSON with stream().toList(): ["a","b","c"]
728x90
반응형
'java' 카테고리의 다른 글
JJWT 0.11.2 에서 0.12.5 버전 마이그레이션 (0) | 2024.05.20 |
---|---|
[JAVA] JDK 11에서 JDK 21로 변경하기 (LTS버전) (0) | 2024.05.08 |
[Java21] Virtual Thread 요약 (0) | 2023.05.15 |
[Java11] Exception이 성능에 미치는 영향 (0) | 2023.03.19 |
[Java11] Customizing redisCodec for redisCommands (0) | 2023.02.09 |
댓글