嵌套循环有时会影响性能,最近写的代码,有一个双层list for each需要被简化,特此记录一下
原代码:
model:
ParentList
- ParentElement
- ChildList
- ChildElement
List<SampleClass> function(String languageCode, ParentList parentList){
List<SampleClass> list = new ArrayList<>();
for (ParentElement parentElement : parentList) {
ChildList childList = parentElement.getChildList();
for (ChildElement childElement : childList) {
if (childElement.getLanguage().equalsIgnoreCase(languageCode)) {
list.add(createSample(parentElement.getCode(),childElement.getName()));
}
}
}
return list;
}
SampleClass createSample(String code, final String name) {
final SampleClass sampleClass = new SampleClass();
sampleClass.setCode(code);
sampleClass.setName(name);
return sampleClass;
}
简化后:
List<SampleClass> function (String languageCode,ParentList parentList){
List<SampleClass> list = new ArrayList<SampleClass>();
parentList.forEach(parentElement -> {
ChildList childList = parentElement.getChidList();
childList().stream()
.filter(childElement -> childElement.getLanguage().equalsIgnoreCase(languageCode))
.findFirst().ifPresent(childElement ->
list.add(createSampleClass(parentElement.getCode(), childElement.getName()))
);
return list;
}