2017-04-12 1 views
3

J'ai une liste optionnelle d'entiers. Je souhaite voir si la liste est effectivement présente et ensuite la convertir en un flux. Une façon de le faire estItérer sur une liste optionnelle d'entiers ifPresent

Optional<List<Integer>> listOfNumbers = ... 
if (listOfNumbers.isPresent()) { 
    listOfNumbers.get().stream(); 
} 

Mais, je ne souhaite pas avoir cette condition si. Je cherchai et vu que ifPresent() fait la même chose, mais quand je fais listOfNumbers.ifPresent(this::get)), je reçois l'erreur suivante:

non-static variable this cannot be referenced from a static context

Pouvez-vous s'il vous plaît me aider à faire cela d'une manière efficace? C'est encore nouveau pour moi, donc s'il y a quelque chose de mal dans ma compréhension s'il vous plaît faites le moi savoir.

+2

'listOfNumbers.orElse (Collections.emptyList()). Stream() ... '? –

Répondre

7

Comme il est indiqué dans les commentaires, la plus propre façon d'obtenir un Stream est d'utiliser Optional.orElse méthode avec Collections.emptyList:

Stream<Integer> stream = listOfNumbers.orElse(Collections.emptyList()).stream(); 

L'autre solution possible avec Optional.map:

Stream<Integer> stream = listOfNumbers.map(List::stream).orElse(Stream.empty()); 
+2

J'aime mieux la deuxième version. Je pense que c'est plus pertinent car nous n'avons vraiment pas besoin d'une liste vide, juste un flux vide, –