无法在Java SE 8中使用map函数

时间:2019-03-23 20:26:01

标签: java spring

我正在构建一个spring boot crud应用程序,必须在其中搜索,添加和删除客户。我将项目合规性更改为Java 8。

我正在关注本教程https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example/

@RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
        public ResponseEntity<?> deleteCust(@PathVariable int custId) {
        Customer cust=cRep.findOne(custId);
            return cust.map(cust1 -> {
                cRep.delete(cust1);
                return ResponseEntity.ok().build();
            }).orElseThrow(() -> new ResourceNotFoundException("custId " + custId + " not found"));
        }

但是我遇到以下错误: 尚未为客户类型定义方法map((cust1)-> {})。请您帮帮我吗?

2 个答案:

答案 0 :(得分:0)

如果您已经知道ID,则不应使用findOne(int)findOne返回对目标对象的引用,不再返回Optional<T>。这就是为什么您不能使用map()

的原因

使用findById,它肯定会返回一个Òptional<T>,然后可以将其映射。

@RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteCust(@PathVariable int custId) {
    return cRep.findById(custId)
               .map(cust1 -> {cRep.delete(cust1); return ResponseEntity.ok().build();})
               .orElseThrow(() -> new ResourceNotFoundException("custId " + custId + " not found"));
}

答案 1 :(得分:0)

您的客户变量具有Customer类的类型。例外是告诉您Customer类具有map方法。您可以尝试使用Optional.ofNullable(cRep.findById(custId)).map(...).orElseThrow(...)