Ho una situazione in cui sto leggendo un database e restituendo un List<String>
, in cui ogni stringa viene selezionata e aggiunta all'elenco in base ad alcuni criteri. La firma del metodo è:È sicuro per un metodo restituire un flusso <T>?
public List<String> myMethod(String query, int limit)
il secondo parametro fornisce un limite superiore alla dimensione della lista restituita (impostazione limit=-1
rimuoverà alcuna limitazione dimensione). Per evitare di rendere questo metodo intensivo della memoria, ho scritto un metodo equivalente che restituisce Stream<String>
invece di una lista. (Nota: Non ho bisogno di accesso casuale agli elementi restituiti o qualsiasi altra funzionalità specifiche per la lista.)
Tuttavia, io sono un po 'scettico su un ritorno Stream<>
, soprattutto perché il metodo è pubblico. È sicuro che un metodo pubblico restituisca un valore Stream<>
in Java?
In alcune circostanze può essere più chiaro e più facile restituire un Iterable/Iterator. Io spesso costruisco un 'Iterator' nel mio codice. Fare un 'Stream' da un' Iterator' è abbastanza [semplice] (http://stackoverflow.com/q/21956515/823393). –
OldCurmudgeon
@OldCurmudgeon Se si restituisce 'Stream', si ottiene' Iterator' quasi gratis ('stream.iterator()'). –
@Marko - Concordato - ma sei ancora retrocompatibile con Java 7 e versioni precedenti se offri un semplice adattatore per lo streaming di 'Iterator' in Java 8. – OldCurmudgeon