2016-06-20 9 views
-1

ストリーム:は、Javaで配列内のすべてのリストのリストを作成し、私はすべてが<code>Variable</code>のリストを持っている<code>Node</code>の配列持ち

Node[] arguments; // argument[i].vars() returns List<Variable> 

私はすべての変数を含むリストを作成したいと思いますが。私は今日これが好きです:

List<Variable> allVars = new ArrayList<>(); 
for (Node arg : arguments) { 
    allVars.addAll(arg.vars()); 
} 

ストリームを使って同じことをすることはできますか?

私はこれを試してみましたが、私は( addAllを使用して)追加のすべてのリストの要素を持つ List<Variable>をご希望のに対し、それは、私に List<List<Variable>>を返し

List<List<Variable>> vars = Arrays.asList(arguments).stream() 
            .map(Node::vars) 
            .collect(Collectors.toList()); 
+0

また、 'Arrays.asList(arguments).stream()'の代わりに 'Stream.of(arguments)'を使うこともできます。 – Solorad

答えて

4

使用flatMapcollectを呼び出す前にStream<Variable>Stream<List<Variable>>を変換します:

List<Variable> vars = Arrays.asList(arguments).stream() 
          .map(Node::vars) 
          .flatMap(List::stream) 
          .collect(Collectors.toList()); 
関連する問題