【发布时间】:2015-06-03 22:08:11
【问题描述】:
我是 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
Stream<ResponseEntity<User>>类型的方法orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND))未定义
我的基本接口方法如下所示
Iterable<T> findAll(Iterable<PK> pks);
【问题讨论】:
-
Stream.map() 返回一个 Stream,而 Stream 没有 orElse() 方法。你通过返回一个 Iterable 使你自己的生活变得复杂。为什么不返回 List 或 Set,甚至是 Collection,并使用 isEmpty()?顺便说一句,您映射的不是列表,而是用户。如果你真的想继续使用Iterable,使用iterable.iterator().hasNext() 看看它是否为空。
-
该接口由 Spring 包之一提供。 ))))
-
然后使用 iterable.iterator().hasNext() 看是否为空。但话虽如此,在这种情况下我不会返回 404。只需返回一个 200 和一个空列表。 404 用于您尝试获取的未知资源。您在此处搜索资源,但未找到任何内容是有效结果。
标签: java lambda java-8 java-stream