Jestem nowy w Java 8. Nie jestem w stanie zrozumieć, co jest nie tak w poniższym kodzie. Pomysł polega na wysłaniu Collection<User>
, jeśli nie jest pusta. Ale jeśli kolekcja jest pusta, niż wysłano odpowiedź jednostki Entity HttpStatus.NOT_FOUND
.Jak sprawdzić, czy kolekcja nie jest pusta przy użyciu strumienia Javy
@RequestMapping(value = "/find/pks",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Collection<User>> getUsers(@RequestBody final Collection<String> pks)
{
return StreamSupport.stream(userRepository.findAll(pks).spliterator(), false)
.map(list -> new ResponseEntity<>(list , HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
Eclipse pokazuje mi błąd w następnym punkcie .orElse
Sposób
orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND))
jest nieokreślony dla rodzajuStream<ResponseEntity<User>>
Moja metoda interfejs baza wygląda jak po
Iterable<T> findAll(Iterable<PK> pks);
Stream.map() zwraca strumień, a Stream nie ma metody orElse(). Powodujesz, że twoje własne życie jest skomplikowane, zwracając Iterable. Dlaczego nie zwrócisz listy lub zestawu, a nawet kolekcji i użyjesz funkcji isEmpty()? BTW, to, co mapujesz, nie jest listą, to użytkownik.Jeśli naprawdę chcesz nadal używać Iterable, użyj iterable.iterator(). HasNext(), aby sprawdzić, czy jest pusty, czy nie. –
Interfejs jest dostarczany przez jeden z pakietów Spring.)))) –
Następnie użyj iterable.iterator(). HasNext(), aby sprawdzić, czy jest pusty, czy nie. Ale to powiedziawszy, nie zwróciłbym 404 w takim przypadku. po prostu zwróć 200 z pustą listą. 404 jest dla nieznanego zasobu, który próbujesz zdobyć. Wyszukujesz tutaj zasoby, a znalezienie niczego nie jest prawidłowym wynikiem. –