Если я правильно понимаю, ваш код выполняет следующие действия:
- для каждого сохраненного пользовательского объекта
- сопоставляет его с одним элементом в UploadUser List, где имя пользователя совпадает, регистр-чувствительно
- установить идентификатор найденного UploadUser равным идентификатору SavedUserEntity
- собрать найденных UploadUsers в список.
uploadUserList.stream()
выглядит подозрительно для меня, так как он пересекаетuploadUserList для каждого элемента savedUserEntities
.Предполагая, что uploadUserList не изменяется, это может быть пустой тратой времени.Вместо того, чтобы обходить список, вы можете вместо этого искать элемент на карте.
Кроме того, в документации Streams говорится, что метод peek
существует главным образом для поддержки отладки, поэтому я немного сдерживаюсьчтобы на самом деле использовать peek
.
Я бы предложил что-то вроде этого:
Сначала мы строим карту, которая связывает имя пользователя с UploadUser.Если найдено несколько имен пользователей, используйте первое (left
одно).
Map<String, UploadUser> uploadUserMap = uploadUserList.stream()
.map(t -> new SimpleEntry<>(t.getUserName().toLowerCase(), t))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (left, right) -> left));
Затем мы проходим по SavedUserEntries и проверяем, существует ли соответствующий UploadUser (по имени пользователя без учета регистра).Если так, то установите id и сопоставьте текущий SavedUserEntry с UploadUser.
Наконец, соберите результаты.
List<UploadUser> uploadUsers = savedUserEntities.stream()
.filter(t -> uploadUserMap.containsKey(t.getUserName().toLowerCase()))
.map(t -> {
UploadUser uploadUser = uploadUserMap.get(t.getUserName().toLowerCase());
uploadUser.setId(t.getId());
return uploadUser;
})
.collect(Collectors.toList());
Однако мне не совсем понятно, почему вы должны выбрать одного UploadUser по их имени пользователяи присвойте ему идентификатор saveUserEntity, отбрасывая другие UploadUsers с тем же именем пользователя (они существуют?).
Также
обновляя модель с помощью идентификатора из объектаили установите его в нуль, если не найдено совпадений
Вы ничего не устанавливаете в null
.Ваш фильтр отбрасывает все UploadUsers без совпадения, поэтому i -> i.setId(x.getId())
выполняется только тогда, когда равно совпадению.