list
메서드를 정의 하고 stream
Spring 데이터 저장소에 있을 때 권장 사항은 무엇입니까 ?
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-streaming
예시:
interface UserRepository extends Repository<User, Long> {
List<User> findAllByLastName(String lastName);
Stream<User> streamAllByFirstName(String firstName);
// Other methods defined.
}
여기서는 Page , Slice 에 대해 묻지 않습니다 . 그것들은 나에게 분명하며 문서 에서 설명을 찾았습니다 .
내 가정(내가 틀렸나요?):
Stream은 모든 레코드를 Java 힙에 로드하지 않습니다. 대신
k
레코드를 힙에 로드하고 하나씩 처리합니다. 그런 다음 다른k
레코드를 로드하는 식입니다.List은 한 번에 모든 레코드를 Java 힙에 로드합니다.
백그라운드 배치 작업(예: 분석 계산)이 필요한 경우 모든 레코드를 한 번에 힙에 로드하지 않기 때문에 스트림 작업을 사용할 수 있습니다.
모든 레코드와 함께 REST 응답을 반환해야 하는 경우 어쨌든 레코드를 RAM에 로드하고 JSON으로 직렬화해야 합니다. 이 경우 List을 한 번에 로드하는 것이 좋습니다.
일부 개발자는 응답을 반환하기 전에 스트림을 List으로 수집하는 것을 보았습니다.
class UserController {
public ResponseEntity<List<User>> getUsers() {
return new ResponseEntity(
repository.streamByFirstName()
// OK, for mapper - it is nice syntactic sugar.
// Let's imagine there is not map for now...
// .map(someMapper)
.collect(Collectors.toList()),
HttpStatus.OK);
}
}
list
이 경우 Stream을 사용 하면 동일한 결과를 얻을 수 있으므로 Stream의 이점을 볼 수 없습니다 .
그렇다면 사용 list
이 정당화되는 예가 있습니까?