我正在使用Java的RethinkDB驱动程序。我想过滤表endedAt
中不包含字段jam
的行,如下所示:
public List<Jam> getCurrent(){
Cursor cursor = r.table("jam")
.filter(row -> row.hasFields("endedAt")).not()
.run(conn);
List<Map<String,Object>> list=cursor.toList();
return list.stream().map(item->JamRepository.toJam(item)).collect(Collectors.toList());
}
我有这个错误
Expected type DATUM but found SELECTION Java
我在另一个类中有另一个过滤器功能:
public List<Speedlog> getByTime(long time){
Cursor cursor = r.table("speedlog")
.filter(row -> row.g("createdAt").eq(time))
.run(conn);
List<Map<String,Object>> list=cursor.toList();
return list.stream().map(item->SpeedlogRepository.toSpeedlog(item)).collect(Collectors.toList());
}
此功能正常工作
谁能解释一下这两者之间的区别是什么?为什么
getCurrent
函数会收到该错误?它的含义是什么?如何解决?谢谢 最佳答案
not()
应该紧跟在row.hasFields("endedAt")
之后。现在,您正在尝试在not()
函数的结果上调用filter
。因此,正确的代码:
public List<Jam> getCurrent(){
Cursor cursor = r.table("jam")
.filter(row -> row.hasFields("endedAt").not())
.run(conn);
List<Map<String,Object>> list=cursor.toList();
return list.stream().map(item->JamRepository.toJam(item)).collect(Collectors.toList());
}