有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用流更改ArrayList中对象字段的值,使代码更高效

我在一个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);
}

这段代码是有效的,但流不是我的专长,我的问题是:我能有相同的行为,但不需要额外的if吗?我觉得“如果”是额外的,我想让我的代码更有效率

一个附带的问题是,如果我们有多个同名的条目,有没有一种方法可以使用流,因此,我可以使用什么来将其存储在person对象或可能的新对象数组中,而不是“.findFirst().orElse(null)”


共 (1) 个答案

  1. # 1 楼答案

    您可以使用Optional#isPresent减少代码:

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

    但如果我的目标是性能,streams就不是我的第一选择

    如果要处理所有满足谓词的对象:

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