java - 为什么一个可迭代的计数返回 1?
问题描述
这是 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
这是模型
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class WebsiteUser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String email;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
这是用户存储库
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository<WebsiteUser, Long> {
List<WebsiteUser> findByName(@RequestParam("name") String name);
}
这是我的数据加载器:
@Component
公共类 DataLoader 实现 CommandLineRunner {
private static final Logger log = LogManager.getFormatterLogger(DataLoader.class);
private final UserRepository userRepository;
public DataLoader(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public void run(String... args) throws Exception {
Iterable<WebsiteUser> data = userRepository.findAll();
long count = Stream.of(data).count();
log.info("counted:" + count);
log.info("data:" + data);
}
}
日志返回以下值:
计数:1
数据:[]
我不明白这个返回值。[] 是空的,应该返回 0 而不是 1。你能解释一下为什么会这样吗?我怎样才能得到 0 而不是 1?
解决方案
你没有数据。
Stream.of(data)
产生一个可迭代的流。此流包含 1 个项目 ( data
),即空的可迭代对象,然后将尽职尽责地去:是的。1 个空流。计数为 1。
一般来说,你应该让集合本身变成流——无论 findAll 返回什么,它都比 Iterable 更具体,而且它可能有一个 stream() 方法。如果没有,您应该升级该依赖项。
推荐阅读
- angular - 模态无法使用 NgbActiveModal 关闭
- php - Laravel 5.4 中的 Group By 替代方案
- c# - 使用 iText 7 PDF 进行表格拉伸和单元格对齐
- javascript - 为什么增量器打印 3 即使条件检查小于 3?
- python-3.x - 使用命令行参数调用类方法
- python - git-flask-python :删除pycache和flask会话文件夹是否安全
- c# - 无法使用 selenium Web 驱动程序在 InPrivate 模式下打开 Edge
- c# - 检测新应用并在面板中运行
- spring-boot - 如何使用 Spring Cloud Config 刷新 Spring Boot 配置信息
- html - CSS Flexbox - 在两个 div 之间居中一个 div