java - (Spring Boot)Optional <>类可以像List <>类吗?

原文 标签 java list spring-boot optional

我试图将RoomEntity类作为其通用参数放入列表中,但列表类变为红色(错误),它建议的唯一内容是将列表类更改为可选类。

public interface RoomRepository extends CrudRepository<RoomEntity, Long> {
    List<RoomEntity> findById(Long id);
}


RoomEntity类别

@Entity
@Table(name = "Room")
public class RoomEntity {

}


他们是一样的吗?

List<RoomEntity> findById(Long id); 
Optional<RoomEntity> findById(Long id);

最佳答案

可选和列表是两个非常不同的概念。

CrudRepository findAllById方法返回一个Iterable。
findById方法返回Optional。

一个Iterable可用于一个集合的元素一个访问,因此可与List类一起使用。

Optional是一个容器对象,它可以包含也可以不包含非空值(零个或一个元素)。这将只有一个元素,如果有的话,列表中的元素就不会很多。

CrudRepository :: findAllById可以发送一个以上的ID,因此可以返回多个元素,这样做的方式是返回一个可迭代的对象,您可以使用它来逐个选择每个返回的结果。只能向findById方法发送一个ID,因此如果该元素存在(包装在Optional中),则返回该元素;否则,返回Optional.none。

如果由于打算发送多个ID而正在寻找要返回的列表,请使用findAllById方法。如果只需要按ID指定特定元素,则可以使用findById方法,但是必须先将返回的Optional对象解开,然后才能使用Optional.get,Optional.isPresent或使用在流管道中对其进行地图或平面图调用。

关于java - (Spring Boot)Optional <>类可以像List <>类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172000/

相关文章:

java - JPA向下转换以访问子类方法

python - 将值 append 到字典中的一个列表 将值 append 到字典中的所有列表

java - Spring Boot-Firebase Admin SDK-通知

java - 使用缓存抽象的Spring-boot中的缓存故障转移机制

java - 如何在Swagger 2中为每个端点放置不同的示例?

java - Java二进制搜索

java - 在使用 hibernate 和 postgresql 保存实体后检索序列 int 的正确方法?

java - Android EditText-如何检测SoftKey是否编写了某些内容?

java - 检索列表大小时发生ConcurrentModificationException

java - Java 中的泛型(和通配符)