不兼容的类型 - 必需的长期发现 void + Optional<>

Incompatible types - Required Long Found void + Optional<>

整个第一行是红色下划线的消息:Incompatible types. Required: Java.lang.Long. Found: void.

Long userId = request.ifPresent(x -> x.getUsers().getId());
Optional<Users> employee = usersRepository.findOne(userId);

我的 findOne 方法:

// fetch an individual user by ID
Optional<Users> user = usersRepository.findOne(1L);
log.info("User found with findOne(1L):");
log.info("--------------------------------");
log.info(user.toString());
log.info("");

用户 POJO:

    @Entity
    public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="user_id")
    private Long id;
    ...
        public Long getId() {
                return id;
            }
    ...
    }

这是怎么回事?

假设请求是可选的ifPresent消耗一个值并且returns无效。

编译正确地告诉您不能将 void 分配给 Long。

正如其他张贴者指出的那样,您试图以错误的方式使用 ifPresent

假设 request 是一个 Optional<Request>,您可能应该这样做:

Optional<Long> userIdMaybe = request.map(r -> r.getUsers().getId());
Optional<Users> employee = userIdMaybe.flatMap(usersRepository::findOne);