首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : MongoRepository count()和findAll()

Java : MongoRepository count()和findAll()
EN

Stack Overflow用户
提问于 2019-09-18 15:16:32
回答 2查看 3.6K关注 0票数 2

我注意到了mongo的Spring数据中有一些奇怪的东西:

MongoRepository扩展了CrudRepositoryfindAll()返回了一个Iterable,这在count()方法中是可以的,因为它返回了一个long

代码语言:javascript
复制
class CrudRepository {

  ...

  Iterable<T> findAll();

  long count();
}

在mongo MongoRepository中,findAll()方法returs a List

代码语言:javascript
复制
class MongoRepository extends CrudRepository {

  ...  

  @Override
  List<T> findAll();
}

但是List#size()返回一个intMongoRepository#count()方法继续返回一个long。

当集合超过Integer.MAX_VALUE时会发生什么?我们还能打电话给List<T> findAll()吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-18 15:39:45

我喜欢你的观点:)根据你对这个问题。的要求,这个问题看起来很相似

正如Java规范中所提到的:https://docs.oracle.com/javase/specs/jls/se13/html/jls-15.html#jls-15.10.1

每个维度表达式都经历一元数字提升(第5.6.1节)。提升的类型必须是int,否则会发生编译时错误.

由于维度必须是int,所以我们可以在数组中存储最大大小的2,147,483,648,同时考虑到ArrayList只是数组,所以不能在ArrayList中存储比INTEGER.MAX_VALUE更多的内容。(当然,列表的不同实现可能表现得不同)

春季数据JPA允许您自定义查询方法。您总是可以自由地创建一个返回类型为Iterable的查询方法。

代码语言:javascript
复制
@Override
Iterable<T> findAll();
票数 3
EN

Stack Overflow用户

发布于 2019-09-18 15:31:21

来自java.util.List#size javadoc:

返回此列表中的元素数。如果此列表包含多个Integer.MAX_VALUE Integer.MAX_VALUE**.**元素,则返回

因此,当集合大小超过Integer.MAX_VALUE时,size方法将返回Integer.MAX_VALUE

我们还能打电话给List<T> findAll()吗?

是的,但是很可能OutOfMemoryError的呼叫会失败

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57996053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档