java - Java8 - 显式类型如何匹配一个变体 - 而不是其他类型?
问题描述
我有一个简单的片段如下。我提到了这个
List<Document> list = new LinkedList<Document>();
FindIterable<Document> itr = collection.find(findQuery)
.forEach((Document doc) -> list.add(doc));
return list;
它编译没有任何问题。
- 我猜我们是在告诉编译器
doc
是 type 的Document
。为什么需要它?
但是,如果我执行以下操作,则会引发模棱两可的错误。我提到了这个但无法准确理解和理解。
collection.find(findQuery).forEach(list::add);
谁能解释为什么第二个语句不起作用?
有没有更好的方法来写第一个[工作的]?
Java版本:1.8.0_231
导入语句:
import java.util.List;
import java.util.Optional;
import com.mongodb.client.FindIterable;
import org.bson.Document;
解决方案
问题是它forEach
只是 a Consumer
,它只有一个 method void accept(T element)
,而您正试图返回一个值。
第一个版本中的“模棱两可”错误受此处其他帖子的影响。
你可以这样做(我认为这更惯用)
return StreamSupport.stream(collection.find(findQuery).spliterator(), false)
.collect(Collectors.toList());
推荐阅读
- node.js - 如何在 MongoDB 中使用正则表达式查找数组中的字符串。?
- postgresql - jooQ + JPA + Hibernate + postgresql 有强制转换问题 (::)。错误:“:”处或附近的语法错误
- php - 如何使用simplehtmldom从这个页面中提取数据
- docker - 无法使用 MockServer 建立 TLS:curl: (60) Peer's Certificate issuer is not Recognized
- python - .fillna 清空整个列而不是替换空值
- javascript - 向drawimage添加过渡
- python - 使用两列唯一键添加基于列日期的行 - 熊猫
- reactjs - 如何将 React mousemove 类重构为功能组件?
- php - 通过ajax处理会话超时时的重定向
- vba - 用户表单更改百分比的 IF 语句?