How to check if Collection is not empty using java Stream
You are mixing two things up. The first task is to convert the Iterable
to a Collection
which you can indeed solve using the Stream
API:
Collection<User> list=
StreamSupport.stream(userRepository.findAll(pks).spliterator(), false)
.collect(Collectors.toList());
Note that this stream is a stream of User
s, not a stream of lists. Therefore you can’t map a list
to something else with this stream. The map
operation will map each element of the stream to a new element.
Then you can use this list to create the ResponseEntity
return list.isEmpty()? new ResponseEntity<>(HttpStatus.NOT_FOUND):
new ResponseEntity<>(list, HttpStatus.OK);
You can combine these steps by creating a Collector
performing this steps though this does not provide any advantage, it’s only a matter of style:
ResponseEntity<User> responseEntity=
StreamSupport.stream(userRepository.findAll(pks).spliterator(), false)
.collect(Collectors.collectingAndThen(Collectors.toList(),
list -> list.isEmpty()? new ResponseEntity<>(HttpStatus.NOT_FOUND):
new ResponseEntity<>(list, HttpStatus.OK) ));
It's not necessary, and often a mistake, to cram everything into one line. In this case, you can't - there's no such API for your intention.
Keep it simple:
Collection<User> list = <your stream code that gets a list>;
if (list.isEmpty())
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
return new ResponseEntity<>(list, HttpStatus.OK);
but if you absolutely must:
return <your code>.map(list -> new ResponseEntity<>(list, list.isEmpty() ? HttpStatus.NOT_FOUND : HttpStatus.OK));