java
[JAVA16] stream().collect(Collectors.toList())와 stream().toList()
moonsiri
2024. 7. 3. 11:49
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
반응형