2016-04-27 7 views
-1

Ich habe eine boolean[] und ich möchte in List<Integer>. Jedes Element in der Liste ist ein Index der boolean[], wobei dieser Index true sein muss. Im Moment bin ich mit diesem Code fest:Mapping Array-Indizes zu Liste mit Streams

Stream.of(sieve) 
     .filter(x->x.equals(true)) 
     .mapToInt(???) 
     .collect(toList()); 

Jede Idee, wie man diese (mit Strömen natürlich) zu erreichen?

Antwort

0

Sie müssen die Indizes in Ihre Stream Pipeline einführen, indem Sie IntStream::range verwenden.

boolean[] sieve = sieve(); 
int[] numbers = IntStream.range(0, sieve.length).filter(i -> sieve[i]).toArray(); 

Oder wenn Sie ein List<Integer> als Ergebnis wollen:

List<Integer> = IntStream.range(0, sieve.length).filter(i -> sieve[i]) 
         .boxed().collect(Collectors.toList()); 
+0

ich Ihren Ansatz mögen, Dank! –