Sto provando a flatMap
Optional
s in Java. Ecco un esempio semplificato:Java 8 flatMap + Optional.of non viene compilato
List<String> x = Arrays.asList("a", "b", "c");
List<String> result = x.stream().flatMap((val) -> val.equals("b") ? Optional.empty() : Optional.of(val)).collect(Collectors.toList());
ottengo questo messaggio di errore del compilatore:
Error:(10, 27) java: incompatible types: no instance(s) of type variable(s) T exist so that java.util.Optional<T> conforms to java.util.stream.Stream<? extends R>
Cosa c'è di sbagliato? Ecco un esempio di quello che sto cercando di realizzare in Scala:
List("a", "b", "c").flatMap(x => if (x == "b") None else Some(x))
Restituisce:
res2: List[String] = List(a, c)
come previsto.
Come si converte questo in Java in modo che venga compilato?
Grazie! Normalmente filtrerei. In questo caso (il caso reale, non l'esempio di giocattolo semplificato) preferirei usare Optionals perché il filtraggio significherebbe scavare un sacco di cazzate che dovrò fare anche nella fase di mappa. – auramo
Quando ogni elemento del flusso è mappato esattamente a un 'Opzionale', non è necessario usare' flatMap'. Basta usare '.map (val -> val.equals (" b ")? Optional.empty(): Opzionale.di (val)) ' – Holger
@Holger Hai assolutamente ragione. Non ci ho pensato. Stavo seguendo la decisione dell'OP di utilizzare un flatMap. – Eran