我在理解java流方面遇到了一些麻烦。我创建了一个JUnit测试,它基本上将一个元素存储在数据库中,检索它(结果在流中返回),然后比较这两个元素。测试失败,所以我开始调试。突然,测试通过了。结果我的断点给了流需要建立的时间?!
@Test
public void matchAllTest() {
client.insert(object); //database schema is empty
Stream<Object> stream = client.query("{ query matching all objects }");
Object firstResult = stream.findFirst().get();
assertObjectEquals(object, firstResult);
}
query
与Elasticsearch一起用作数据库,如下所示:
public Stream<Object> query(String query) {
SearchRequestBuilder request = client.prepareSearch("index");
request.setQuery(query);
Stream.Builder<Object> stream = Stream.builder();
SearchResponse response = request.get();
SearchHits hits = response.getHits();
hits.forEach(object -> stream.accept(object);
return stream.build();
}
测试中的 client
是指使用query
方法的类。第二个代码段中的client
引用了一个Elasticsearch节点客户端,请参阅ES Java docs。
测试失败,出现NoSuchElementException(&#34;没有值和#34;) - 除非我给它时间。
这里到底发生了什么,如何避免异常?