java - 仅知道其 UUID 替换或更新列表中的对象
问题描述
我知道已经有人问过类似的问题,但每次答案都围绕“使用地图”展开。
就我而言,我必须使用列表。更准确地说,我可以使用其他数据结构进行处理,但信息最终会以List的形式存储。
情况如下:我有一个对象,我将调用它Sequence
,其中包含List
我将调用的对象Phase
。
在其他属性中,Phase
对象通过ObjectId
在给定的处理期间,我必须将包含在Phase
其中的现有替换为另一个。这个的输入是替换对象和要替换的值List<Phase>
Sequence
Phase
Phase
String
ObjectId
Phase
我希望能够使用 Java8 做这样的事情:
public void replacePhase(Sequence sequence, Phase replacementPhase, String idPhaseToBeReplaced) {
List<Phase> phaseList = sequence.getPhaseslist();
Phase phaseToBeReplaced = phaseList.stream().filter(p -> p.getId().toString().equalsIgnoreCase(idPhaseToBeReplaced)).findFirst().orElse(null);
if (phaseToBeReplaced != null) {
phaseToBeReplaced = replacementPhase;
}
瞧,List<Phase>
将会更新。
我知道这样的事情会起作用:
public void replacePhase(Sequence sequence, Phase replacementPhase, String idPhaseToBeReplaced) {
List<Phase> phaseList = sequence.getPhaseslist();
Phase phaseToBeReplaced = phaseList.stream().filter(p -> p.getId().toString().equalsIgnoreCase(idPhaseToBeReplaced)).findFirst().orElse(null);
if (phaseToBeReplaced != null) {
int i = phaseList.indexOf(phaseToBeReplaced );
phaseList.set(i, replacementPhase);
phaseToBeReplaced = replacementPhase;
}
但是,在找到具有所需 UUID 的a时,使用带有 a 的for
循环似乎并不更有效。phaseList
break
Phase
所以我的问题是:有没有一种方法,使用 List 数据结构,找到一个基于(在这种情况下是唯一的)属性的对象,然后用另一个(相同类型的)替换 List 中的所述对象,保持顺序?最好不要遍历整个列表并使用 Java8 功能?
解决方案
为了使您的替换功能以短路方式工作,请使用ListIterator
:
ListIterator<Phase> iterator = phaseList.listIterator();
while(iterator.hasNext()){
Phase phase = iterator.next();
if(phase.getId().toString().equalsIgnoreCase(idPhaseToBeReplaced)){
iterator.set(replacementPhase);
break;
}
}
如果 id 不是唯一的,只需删除break
. 或使用List::replaceAll
.
推荐阅读
- postgresql - 使用 Peewee 在 Postgresql 中将浮点数转换为时间戳
- javascript - 单击图像时更改路径。单击其他路径时,反转以前的路径并将新路径应用于当前单击的路径
- google-api - Google urlshortener api 显示 403 错误
- sql - SQL 时间间隔数据
- python - Django 表单字段未加载到模板上
- amazon-web-services - 无服务器 AutoScaling DynamoDB 错误:ScalingTargetId 必须采用以下格式
- java - 如何设计一个继承自 Rectangle 类的 Square 类
- android - 如何让 Espresso 测试继续进行而不等待异步任务完成?
- python - 多处理模块中 Pool 对象和 Manager 对象之间的位置
- excel - 工作日总和,计算过滤数据