下面的代码运行得很好,但出于好奇,我想知道是否可以用ForEach替换For循环
private static List<SubjectRole> getSubjectRoles(List<ca.payment.simulator.model.api.SubjectRole> subjectRoles) {
List<SubjectRole> subjectRoleList = new ArrayList<>();
for (ca.payment.simulator.model.api.SubjectRole subjectRole : subjectRoles) {
SubjectRole subjectRoleStream = new SubjectRole();
subjectRoleStream.setSubjectRole(subjectRole.getSubjectRole());
subjectRoleList.add(subjectRoleStream);
}
return subjectRoleList;
}
发布于 2020-08-04 22:06:54
您可以,但这不太可能使代码更具可读性。使用Stream.forEach()
List<SubjectRole> subjectRoleList = new ArrayList<>();
subjectRoles.stream()
.forEach(t -> {
SubjectRole subjectRoleStream = new SubjectRole();
subjectRoleStream.setSubjectRole(t.getSubjectRole());
subjectRoleList.add(subjectRoleStream);
});
}
return subjectRoleList;
您可以使用.map()
/.collect()
让Streams API管理List
分配:
List<SubjectRole> subjectRoleList =
subjectRoles.stream()
.map(t -> {
SubjectRole subjectRoleStream = new SubjectRole();
subjectRoleStream.setSubjectRole(t.getSubjectRole());
return subjectRoleStream;
})
.collect(Collectors.toList());
return subjectRoleList;
为了更简洁,您需要以某种方式将实例化和属性集组合到一个调用(方法或构造函数)中。如果没有现有的方法,您可以创建一个私有帮助器:
private static List<SubjectRole> getSubjectRoles(List<ca.payment.simulator.model.api.SubjectRole> subjectRoles) {
List<SubjectRole> subjectRoleList =
subjectRoles.stream()
.map(t -> copy(t))
.collect(Collectors.toList());
return subjectRoleList;
}
private static SubjectRole copy(SubjectRole in) {
SubjectRole out = new SubjectRole();
out.setSubjectRole(in.getSubjectRole());
return out;
}
https://stackoverflow.com/questions/63249643
复制相似问题