gpt4 book ai didi

java - 可选列表和以下映射

转载 作者:行者123 更新时间:2023-12-02 11:11:45 24 4
gpt4 key购买 nike

希望你一切都好。

我遇到过一些涉及列表操作的场景。我们期望对该列表进行以下数据映射并避免任何 NPE。这可以通过 for 循环和内部查询任何数据来完成,这些数据可能包含另一个列表,等等。考虑到性能,处理数据的最佳方法是什么?维护 for 循环会更好,还是我们可以使用选项和 lambda 进行改进,或者至少匹配相同的性能?
例如:

class MyObject {
//Constructors
private int id;
private List<MySecondObject> objList;
private String data;
//getters, setters
}
class MySecondObject {
//Constructors
private int id;
private String desc;
//getters, setters
}
public class MyClass {
public static void main(String args[]) {
List<MyObject> objList = getList();
List<String> descList = new ArrayList<>();
if(objList == null){
return;
}
for(MyObject o : objList) {
if(o.getData() == null || o.getData().isEmpty()){
continue;
}
if(o.getObjList() != null) {
for(MySecondObject s : o.getObjList()) {
if(s.getDesc() != null && !s.getDesc().isEmpty()) {
descList.add(s.getDesc());
}
}
}
}
}
}

谢谢

祝你有美好的一天。

最佳答案

这正是您在代码中所做的,但使用Streams:

public static List<String> createDescList(List<MyObject> objList) {
return Optional.ofNullable(objList).orElse(Collections.emptyList()).stream()
.filter(Objects::nonNull)
.filter(obj -> isNotEmpty(obj.getData()))
.map(MyObject::getObjList)
.flatMap(List::stream)
.filter(Objects::nonNull)
.filter(obj -> isNotEmpty(obj.getDesc()))
.map(MySecondObject::getDesc)
.collect(Collectors.toList());
}

// TODO can be replaced with org.apache.commons.lang3.StringUtils.isNotEmpty() or isNotBlank()
private static boolean isNotEmpty(String str) {
return str != null && !str.isEmpty();
}

关于java - 可选列表和以下映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50567658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com