Изменение значения поля объекта внутри ArrayList с использованием потока, что делает код более эффективным - PullRequest
2 голосов
/ 01 ноября 2019

У меня внутри ArrayList с конечным числом объектов. Я хочу посмотреть в списке для конкретного значения в поле, а затем изменить его.

У меня есть следующая реализация.

String searchName = searchedName; //from outside we provide this
Person person = personList.stream()
        .filter(personList -> searchName.equals(personList.getName()))
        .findFirst()
        .orElse(null);
if (person != null){
    person.setName(replacement);
}

Этот код работает, но потоки - это не моя специальность, мой вопрос: могу ли я вести себя так же, как и я? Т нужно сделать лишнее, если? Я чувствую, что «если» - это нечто дополнительное, и я хотел бы сделать мой код более эффективным.

Дополнительный вопрос: есть ли способ использовать поток в случае, если у нас есть несколько записей с одинаковым именем, поэтомувместо ".findFirst () .orElse (null)", что я могу использовать, чтобы сохранить его внутри объекта person или возможного нового массива объектов.

1 Ответ

5 голосов
/ 01 ноября 2019

Вы можете уменьшить код, используя Optional#isPresent:

personList.stream()
          .filter(personList -> searchName.equals(personList.getName()))
          .findFirst()
          .ifPresent(person -> person.setName(replacement));

Но если бы я стремился к производительности, потоки не были бы моим первым выбором.

Если вы хотитеобработать все объекты, которые выполняют предикат:

personList.stream()
          .filter(personList -> searchName.equals(personList.getName()))
          .forEach(person -> person.setName(replacement));
...