JavaScript
x
@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);
}
I’m creating an endpoint to list just a single object with findById, and using lambda to go through the list and find the id, but the terminal is acusing an error because of the compareTo(id) part.
‘java: long cannot be dereferenced’
Need some help.
Advertisement
Answer
well id
is long
, so you should use ==
instead of .compareTo()
JavaScript
StockDTO dtoSelect = list.stream().filter(x -> x.getId() == id).findFirst().get();
Or “box” the id
using Long.valueOf(id)
…btw, maybe you should use .equals()
instead of .compareTo() == 0