如何使用Streams将一种类型的List转换为另一种类型的List?

les*_*nar 0 java java-8 java-stream

我想用Streams来实现以下目的:

我有完整不同结构的列表InputOutput对象.

使用for循环,我可以将a转换List<Input>为a List<Output>,如下所示:

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

有了溪流,我试过这样的事情:

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()); 
}
Run Code Online (Sandbox Code Playgroud)

注意: 我不确定Stream我应该使用哪种方法.我filter只是用来显示一些虚拟代码.

Era*_*ran 6

使用map()来变换Stream<Input>Stream<Output>:

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()); 
}
Run Code Online (Sandbox Code Playgroud)

如果你在Output类中有适当的构造函数,这可以缩短:

private List<Output> getOutPutListFromInputList(List<Input> inPutList) 
{
    return listOfPoolsInRun.stream()
                           .map(input -> new Output(input.getArg2(),input.getArg7()))
                           .collect(Collectors.toList()); 
}
Run Code Online (Sandbox Code Playgroud)