2016-11-24 5 views
0

私は次のことを達成するためにStream Sを使用したい:Streamsを使用して1つのタイプのリストを別のタイプのリストに変換する方法はありますか?

私は完全に異なる構造を有するInputOutputオブジェクトのリストを持っています。

次のように私は List<Output>List<Input>を変換することができ、forループで

private List<Output> getOutPutListFromInputList(List<Input> inPutList) { 
    List<Output> outPutList = new ArrayList<Output>(); 
    outPutList = listOfPoolsInRun.stream.filter(<Somehow converting the input into output>) 
           .collect(Collectors.toList()); 
} 

注:私はどのわからない、私はこのような何かをしようとした流れで

for (Input input : listOfInput) { 
    Output currentOutPutInstance = new Output(); 
    currentOutPutInstance.setArg1(input.getArg2()); 
    currentOutPutInstance.setArg2(input.getArg7()); 
    listOfOutPuts.add(currentOutPutInstance); 
} 

Stream方法私は使用する必要があります。私はちょうどいくつかのダミーコードを表示するためにfilterを使用しました。 Stream<Output>Stream<Input>を変換する

+1

なぜ 'fillter'ですか? – Mritunjay

+0

@Mritunjay:これは単なる例で、私はここで何が使えるか分かりません – Roxy

答えて

6

使用map()

private List<Output> getOutPutListFromInputList(List<Input> inPutList) 
{ 
    return listOfPoolsInRun.stream() 
          .map(input -> { 
           Output out = new Output(); 
           out.setArg1(input.getArg2()); 
           out.setArg2(input.getArg7()); 
           return out; 
          }) 
          .collect(Collectors.toList()); 
} 

あなたはOutputクラスの適切なコンストラクタを持っている場合、これを短くすることができます

private List<Output> getOutPutListFromInputList(List<Input> inPutList) 
{ 
    return listOfPoolsInRun.stream() 
          .map(input -> new Output(input.getArg2(),input.getArg7())) 
          .collect(Collectors.toList()); 
} 
+0

完全性のためには、入力を処理して出力を得る必要があるので、さらに短くすることもできます: return listOfPoolsInRun.stream()。map(this :: processInputs).collect(コレクタ.toList()); – Kree

+0

状況や風味に応じて、Outputが入力からインスタンス化する方法を知っている場合、静的なファクトリメソッドを提供できるので、 'map(Output :: fromInput)'と書くことができます。 –

4

はあなたのコードのこの部分を作ります方法:

OutPut createOutput(Input input) { 
    OutPut currentOutPutInstance=new Output(); 
    currentOutPutInstance.setArg1(input.getArg2()); 
    currentOutPutInstance.setArg2(input.getArg7()); 
    return currentOutPutInstance; 
} 

それからちょうどmapそれを超えるような:

outPutList = listOfPoolsInRun.stream().map(this::createOutput).collect(Collectors.toList()); 

専用のメソッドcreateOutputを持つことが、私はそのようなコードをより読み見つける必要はありませんが。

関連する問題