How to check if Collection is not empty using java Stream

旧城冷巷雨未停 提交于 2019-12-04 04:39:00

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 Users, 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));

That depends on your terminal operation of the stream, remember that a stream can only be consumed once.

  • Is it a grouping by/statistics operation? Then you'll get a 0 count or an empty map of groups.
  • If it collects into a list then it's an empty list.
  • If it's one of the methods that returns an Optional (such as findAny) then you can use the optional's null-checking methods.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!