首页 > 解决方案 > Java8 - 显式类型如何匹配一个变体 - 而不是其他类型?

问题描述

我有一个简单的片段如下。我提到了这个

List<Document> list = new LinkedList<Document>();
FindIterable<Document> itr = collection.find(findQuery)
                       .forEach((Document doc) -> list.add(doc));
return list;

它编译没有任何问题。

  1. 我猜我们是在告诉编译器doc是 type 的Document为什么需要它?

但是,如果我执行以下操作,则会引发模棱两可的错误。我提到了这个但无法准确理解和理解。

collection.find(findQuery).forEach(list::add);
  1. 谁能解释为什么第二个语句不起作用?

  2. 有没有更好的方法来写第一个[工作的]

Java版本:1.8.0_231

导入语句:

import java.util.List;
import java.util.Optional;
import com.mongodb.client.FindIterable;
import org.bson.Document;

标签: javaeclipsejava-8mongo-java-driver

解决方案


问题是它forEach只是 a Consumer,它只有一个 method void accept(T element),而您正试图返回一个值。

第一个版本中的“模棱两可”错误受此处其他帖子的影响

你可以这样做(我认为这更惯用)

return StreamSupport.stream(collection.find(findQuery).spliterator(), false)
                    .collect(Collectors.toList());

推荐阅读