2017-08-23 30 views
17

を使用して単一の値をコレクトリストの組み合わせ:は、私は次のようなデータを持っているストリーム

CustomClass first = new CustomClass(1, Arrays.asList(1, 2, 3)); 
CustomClass second = new CustomClass(5, Arrays.asList(6,7,8)); 
List<CustomClass> list = Arrays.asList(first, second); 

は今、私はCustomClassとそのリストから値から値が含まれているリストに、このデータを収集します。

私はこれを取得するには:1, 1, 2, 3, 5, 6, 7, 8

これは私が実装するものである:

list.stream().forEach(item -> { 
     result.add(item.value); 
     item.values.stream().forEach(seconditem -> result.add(seconditem)); 
    }); 

私はストリームの収集方法があります知っているが、私は両方を収集するためにそれを使用する方法を理解していません1つの値と同じクラスの値のリスト。

+0

CustomClassの値と値は何ですか? – azro

+0

ああ申し訳ありませんが、それは整数とリストです

+2

それ以外のものがあれば、 'item.values.stream()。forEach(result :: add)'や 'result.addAll(item.values())' –

答えて

21

あなたはStream.of単一の値やその他の値のストリームを組み合わせることStream.concatを使用することができます。

List<Integer> result = list.stream() 
     .flatMap(x -> Stream.concat(Stream.of(x.value), x.values.stream())) 
     .collect(Collectors.toList()); 
関連する問題