需求:
Java Bean:(模拟调查问卷活动需要的bean)
// 省略getter、setter及构造方法
// 调查对象
public class ActivityObject {
// 调查名称
private String name;
// 问题列表
private List<QuestionObject> questionObjectList;
}
// 问题对象
public class QuestionObject {
// 问题名称
private String questionName;
// 问题选项列表
private List<OptionObject> optionObjectList;
}
// 选项对象
public class OptionObject {
// 选项名称
private String optionName;
// 选项答案(可能多选)
private String[] results;
}
最终需要的Java Bean:
public class FinalObject {
private String name;
private String questionName;
private String optinName;
private String result;
}
最简单的多重for循环的写法:
public List<FinalObject> convertToFinalObjects(ActivityObject activityObject) {
List<FinalObject> finalObjects = new ArrayList<>();
for (QuestionObject qo : activityObject.getQuestionObjectList()) {
for (OptionObject oo : qo.getOptionObjectList()) {
for (String result : oo.getResults()) {
FinalObject fo = new FinalObject(activityObject.getName(),
qo.getQuestionName(), oo.getOptionName(), result);
finalObjects.add(fo);
}
}
}
return finalObjects;
}
3重for循环,看着让人烦!!!
使用Stream API:
public List<FinalObject> convertToFinalObjects(ActivityObject activityObject) {
List<FinalObject> finalObjects = Stream.of(activityObject)
.flatMap(ao -> ao.getQuestionObjectList().stream()
.flatMap(qo -> qo.getOptionObjectList().stream()
.flatMap(oo -> Arrays.stream(oo.getResults())
.map(result -> new FinalObject(activityObject.getName(),
qo.getQuestionName(), oo.getOptionName(), result)))))
.collect(Collectors.toList());
return finalObjects;
}
参考至:http://cn.voidcc.com/question/p-vwzwpuie-bnn.html