2016-08-16 19 views
6

次のシナリオを達成しようとしています。リスト内の各要素の出現回数に4を掛けます。

enter image description here

私はoldListを持っていると私は4で、各要素の出現箇所を乗算し、ストリームAPIを使用してnewListに入れしようとしています。 oldListのサイズは不明で、毎回異なるサイズで表示されることがあります。

私はすでに2つの伝統的なループでこの問題を解決しました。

private List<Integer> mapHourlyToQuarterlyBased(final List<Integer> oldList) 
{ 

    List<Integer> newList = new ArrayList<>(); 

    for(Integer integer : oldList) 
    { 
     for(int i = 0; i < 4; i++) 
     { 
     newList.add(integer); 
     } 
    } 

    return newList; 
} 

が、私は新たなストリームAPIを学んだし、私の知識を統合するためにそれを使用したいと思います。

答えて

16

元のListの各要素からStream 4の要素を生成するflatMapを使用し、これらすべての要素の単一Streamを生成することができます。

+0

スムーズにテストされています。ありがとうございました。 –

+1

そこに 'コレクション'の非常に良い使用はEran –

10

あなたはflatMapを使用していることをacheiveすることができます

List<Integer> result = list.stream().flatMap(i -> Stream.of(i,i,i,i)).collect(Collectors.toList()); 

以上の一般的な方法では:

List<Integer> result = list.stream().flatMap(i -> Stream.generate(() -> i).limit(4)).collect(Collectors.toList()); 

入力リスト内の各要素について、これは、この要素からなるストリームが4を繰り返し作成し、それを平らに写像する。すべての要素がリストに集められます。

関連する問題