본문 바로가기
java

[JAVA16] stream().collect(Collectors.toList())와 stream().toList()

by moonsiri 2024. 7. 3.
728x90
반응형

Java에서 stream().collect(Collectors.toList()) stream().toList()는 스트림을 리스트로 변환하는 두 가지 방법입니다. JDK 16에서 Stream.toList() 메서드가 도입되었으며, 이 메서드와 Collectors.toList() 메서드 간의 차이점은 다음과 같습니다.

 

stream().collect(Collectors.toList())

  1. 가변 리스트 반환
    • stream().collect(Collectors.toList())는 가변 리스트를 반환합니다. 즉, 반환된 리스트는 수정할 수 있습니다.
  2. 유연성
    • Collectors.toList()는 더 많은 유연성을 제공합니다. 커스터마이징이 필요한 경우 다른 Collector와 결합하여 사용할 수 있습니다.
  3. 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()

  1. 불변 리스트 반환
    • stream().toList()는 불변 리스트를 반환합니다. 즉, 반환된 리스트는 수정할 수 없습니다.
  2. 성능 최적화
    • 내부적으로 최적화되어 있으며, 필요한 경우 더 적은 메모리를 사용할 수 있습니다.
  3. 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
반응형

댓글