java - (Spring boot)Optional<>Class可以像List<>Class一样吗?

标签 java list spring-boot option-type

我试图将 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。

可迭代对象可用于逐个访问集合中的元素,因此可以与 List 类结合使用。

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

CrudRepository::findAllById 可以有多个 ID 发送给它,因此可以返回多个元素,它执行此操作的方式是返回一个可迭代对象,您可以使用它来一一选择每个返回的结果。 findById 方法只能发送单个 ID,因此如果该元素存在(包装在Optional 中),则返回该元素;如果不存在,则返回Optional.none。

如果您因为打算发送多个 ID 而需要查找要返回的列表,请使用 findAllById 方法。如果您只需要通过 ID 获取特定元素,请使用 findById 方法,但随后您必须先解开返回的可选对象,然后才能使用Optional.get、Optional.isPresent或使用在流管道之外使用它在流管道中对其进行映射或平面映射调用。

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

相关文章:

java - Eclipse - 按语句移动

java - 方法可以可读并且更短吗?

C Linked List - 链接下一个链表节点

python - 如果在 Python 的新列表中找到,则从 dict 中删除

Python:从列表中查找字符串中的子字符串,但保存子字符串

javascript - 向springboot Controller 提交大量文本

java - 元编程 - 自解释代码 - 教程、文章、书籍

java - Java如何区分库和应用程序?

java - Spring Boot 将 @Value 绑定(bind)到 Enum 不区分大小写

java - Spring Boot 不会替换 Spring Tool Suite 版本 : 3. 8.4.RELEASE 中的系统变量 {user.home}