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

Java 如何使用Streams将一种类型的列表转换为另一种类型的列表?,java,java-8,java-stream,Java,Java 8,Java Stream,我想使用Streams实现以下功能: 我有一个结构完全不同的Input和Output对象列表 使用for循环,我可以将列表转换为列表,如下所示: for (Input input : listOfInput) { Output currentOutPutInstance = new Output(); currentOutPutInstance.setArg1(input.getArg2()); currentOutPutInstance.setArg2(input.ge

我想使用
Stream
s实现以下功能:

我有一个结构完全不同的
Input
Output
对象列表

使用for循环,我可以将
列表
转换为
列表
,如下所示:

for (Input input : listOfInput) {
    Output currentOutPutInstance = new Output();
    currentOutPutInstance.setArg1(input.getArg2());
    currentOutPutInstance.setArg2(input.getArg7());
    listOfOutPuts.add(currentOutPutInstance);
}
对于streams,我尝试了以下方法:

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()); 
}
私有列表getOutPutListFromInputList(列表inPutList){
List outPutList=new ArrayList();
outPutList=ListofPoolsRun.stream.filter()
.collect(Collectors.toList());
}
注意:我不确定我应该使用哪个
方法。我使用了
过滤器
只是为了显示一些伪代码。

使用
map()
转换为


将代码的这一部分作为方法:

OutPut createOutput(Input input) {
    OutPut currentOutPutInstance=new Output();
    currentOutPutInstance.setArg1(input.getArg2());
    currentOutPutInstance.setArg2(input.getArg7());
    return currentOutPutInstance;
}
然后像这样在上面画一张地图:

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

虽然没有必要使用专用的方法
createOutput
,但我发现这样的代码更具可读性

为什么
fillter
?@Mritunjay:这只是一个例子,出于完整性考虑,我不确定我可以在这里使用什么,因为输入必须经过处理才能得到输出,所以它甚至可以缩短为:return list of poolsinrun.stream().map(this::processInputs.collect(Collectors.toList());或者,根据情况和风格,如果输出知道如何从输入中实例化自己,它可以提供一个静态工厂方法,这样您就可以编写
map(Output::fromInput)
OutPut createOutput(Input input) {
    OutPut currentOutPutInstance=new Output();
    currentOutPutInstance.setArg1(input.getArg2());
    currentOutPutInstance.setArg2(input.getArg7());
    return currentOutPutInstance;
}
outPutList = listOfPoolsInRun.stream().map(this::createOutput).collect(Collectors.toList());