2016-04-27 64 views
-1

我有boolean[],我想變成List<Integer>。列表中的每個項目都將是boolean[]的索引,其索引必須是true。 現在我仍堅持這一代碼:將數組索引映射到列表與流

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

如何做到這一點(當然,流)你知道嗎?

回答

0

您必須使用IntStream::range向您的Stream管線介紹索引。

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

或者,如果你想有一個List<Integer>的結果是:

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

我喜歡你的方法,謝謝! –