gpt4 book ai didi

java - 如何使用java Stream检查集合是否为空

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:41 26 4
gpt4 key购买 nike

我是 Java 8 的新手。我无法理解以下代码中的错误。思路是发Collection<User>如果它不是空的。但是如果集合是空的而不是发送 HttpStatus.NOT_FOUND实体响应。

@RequestMapping(value = "/find/pks", 
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Collection<User>> getUsers(@RequestBody final Collection<String> pks)
{
return StreamSupport.stream(userRepository.findAll(pks).spliterator(), false)
.map(list -> new ResponseEntity<>(list , HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}

Eclipse 在以下几点显示错误 .orElse

The method orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)) is undefined for the type Stream<ResponseEntity<User>>

我的基本接口(interface)方法如下所示

Iterable<T> findAll(Iterable<PK> pks);

最佳答案

你把两件事混在一起了。第一个任务是将 Iterable 转换为 Collection,您确实可以使用 Stream API 解决这个问题:

Collection<User> list=
StreamSupport.stream(userRepository.findAll(pks).spliterator(), false)
.collect(Collectors.toList());

请注意,此流是 User 流,而不是列表流。因此,您无法使用此流将 list 映射到其他内容。 map 操作会将流的每个元素 映射到一个新元素。

然后您可以使用此列表创建ResponseEntity

return list.isEmpty()? new ResponseEntity<>(HttpStatus.NOT_FOUND):
new ResponseEntity<>(list, HttpStatus.OK);

您可以通过创建执行这些步骤的 Collector 来组合这些步骤,尽管这不会提供任何优势,这只是样式问题:

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

关于java - 如何使用java Stream检查集合是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com