如果自定义对象的特定属性等于要添加的对象的属性,如何使用Java 8替换ArrayList中的自定义对象?如果Arraylist为空,则应添加新对象。如果ArrayList包含元素,我想找出是否有一个具有相同名称的元素,如果存在,则将其替换为新元素,如果没有元素具有新元素的名称,则应将其添加到ArrayList中。
public class MyElement {
private String name;
private String value;
}
public class MyElementList {
private List<MyElement> elements;
public void add(final MyElement newElement) {
// By using Java 8 functionality (streams)...
// add if elements is empty or if newElement is not existent in elements
// replace oldElement in elements if oldElement.getName().equals(newElement.getName())
}
}
MyElementList 稍后将转换为JSON,这样一个JSON节点如下所示:
{[
{
"name" : "xxx",
"value" : "yyy"
},
{
"name" : "zzz",
"value" : "111"
}
]
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java 8中,你可以使用Stream API结合Optional
来优雅地实现这个逻辑。首先检查列表是否为空,如果为空则直接添加新元素;如果不为空,则尝试找到匹配的元素并替换,或者如果没有匹配项,则添加新元素。以下是修改后的MyElementList
类中的add
方法:
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class MyElementList {
private List<MyElement> elements = new ArrayList<>();
public void add(final MyElement newElement) {
if (elements.isEmpty()) {
// 如果列表为空,直接添加
elements.add(newElement);
} else {
// 使用Stream API查找是否有相同name的元素
Optional<MyElement> existingElementOpt = elements.stream()
.filter(element -> element.getName().equals(newElement.getName()))
.findFirst();
// 如果找到了匹配的元素,则替换它
existingElementOpt.ifPresentOrElse(
oldElement -> {
int index = elements.indexOf(oldElement);
elements.set(index, newElement); // 替换
},
// 如果没有找到匹配的元素,则添加新元素
() -> elements.add(newElement)
);
}
}
// 其他方法...
}
这段代码首先检查elements
是否为空。如果是空的,直接添加newElement
。如果不是空的,它会创建一个流,使用filter
方法找出所有具有与newElement
相同名称的元素,并尝试找到第一个匹配项(findFirst
)。如果找到了匹配项(通过Optional
表示),则使用ifPresentOrElse
方法:如果存在匹配项(即Optional
包含值),则找到该元素在列表中的位置并用新元素替换它;如果不存在匹配项,则直接将新元素添加到列表中。
这样,你就能根据你的需求处理ArrayList中的自定义对象了。