无法识别 Lambda compareTo()

时间:2021-05-27 19:50:03

标签: java api lambda

@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<StockDTO> findById(@PathVariable Long id){
    List<StockDTO> list = new ArrayList<>();
    StockDTO dto1= new StockDTO();
    dto1.setId(1L);
    dto1.setNameStock("AF");
    dto1.setPrice(100D);
    dto1.setVariation(10D);
    dto1.setDateStock(LocalDate.now());
    StockDTO dto2 = new StockDTO();
    dto2.setId(2L);
    dto2.setNameStock("AF2");
    dto2.setPrice(200D);
    dto2.setVariation(20D);
    dto2.setDateStock(LocalDate.now());
    list.add(dto1);
    list.add(dto2);

    StockDTO dtoSelect = list.stream().filter(x -> x.getId().compareTo(id)== 0).findFirst().get();
            return ResponseEntity.ok(dtoSelect);
}

我正在创建一个端点以仅列出一个带有 findById 的对象,并使用 lambda 遍历列表并找到 id,但由于 compareTo(id) 部分,终端提示错误。

'java: long 不能被取消引用'

需要一些帮助。

2 个答案:

答案 0 :(得分:1)

好吧,idlong,所以你应该使用 == 而不是 .compareTo()

StockDTO dtoSelect = list.stream().filter(x -> x.getId() == id).findFirst().get();

或使用 id

Long.valueOf(id) 装箱

...顺便说一句,也许你应该使用 .equals() 而不是 .compareTo() == 0

答案 1 :(得分:0)

lambda 无关紧要。该消息告诉您 x.getId() 返回一个 long,一个您不能对其调用方法的 primitive type。只需写x.getId() == id

相关问题