【发布时间】:2020-02-27 16:37:27
【问题描述】:
我在 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 吗?我觉得“如果”是额外的东西,我想让我的代码更有效率。
一个附带的问题是,如果我们有多个具有相同名称的条目,是否有一种方法可以使用流,所以我可以用什么来代替“.findFirst() .orElse(null)”将它存储在 person 对象中或可能的新对象数组。
【问题讨论】:
-
如果您的列表很大,我建议您对该任务使用经典的 for/while 循环。或者您多次执行此操作。
-
当然,最高效的方法是使用
Map<String, Person>,但它可能没有什么不同,除非您的列表很大并且您正在进行大量查找。
标签: java object arraylist java-8 java-stream