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());