Uberto Barbini [email protected] [it-torino-java-jug] ha scritto il
30/11/18 alle 13:51:
>
>
> dovrebbero essere tutti distrutti alla fine dello stream, no?
>
Volevo risponderti che, sì, nell'esempio di Simone vengono distrutte
perchè lo stream di tuple viene consumato, invece che restituito, e che
se invece lo riscrivi così
public Stream<? extends Object> tuples() {
return Arrays.asList("1", "22", "333").stream()
.map(v -> new Object() {
String value = v;
int length = v.length();
})
.filter(tuple -> tuple.length % 2 == 0);
}
hai un memory leak.
Però poi ho provato a usarlo ed totalmente inutile: ovviamente non puoi
accedere ai campi "value" e "length" da fuori. A meno di reflection o di
definire un tipo con quei membri, e allora addio al vantaggio sintattico.
Quindi tolgo il "molto" dal "molto figo". E' un caso buono solo per casi
come quello dell'esempio
federico