Я знаю, что подобные вопросы уже задавались, но каждый раз, когда ответы вращаются вокруг "использовать карту вместо".
В моем случае, Я ДОЛЖЕН использовать Список. Точнее, я могу использовать другие структуры данных для обработки, но в конечном итоге информация будет храниться в виде списка.
Вот ситуация: у меня есть объект, который я назову Sequence
,содержащий List
объектов, которые я назову Phase
.
Среди других свойств объекту Phase
присваивается UUID через 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;
}
Но это не кажется более эффективнымчто с помощью цикла for
на phaseList
с break
при поиске Phase
с желаемым UUID.
Поэтому мой вопрос: существует ли способ, используя структуру данных List, найтиобъект, основанный на (в данном случае, уникальном) свойстве, а затем заменить указанный объект внутри списка другим (того же типа), сохраняя порядок? Желательно без итерации по всему списку и использования функций Java8?