@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 不能被取消引用'
需要一些帮助。
答案 0 :(得分:1)
好吧,id
是 long
,所以你应该使用 ==
而不是 .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
。