当前位置: 首页 > 知识库问答 >
问题:

使用Java streams/可选[关闭]遍历列表并修改元素

柳正志
2023-03-14

想改进这个问题吗 通过编辑这篇文章,更新问题,以便用事实和引用来回答。

我说的是一个人的名单。我必须遍历此列表才能找到id为X的人,如果找到,我必须更新该人的某些属性:

    persons.stream()
            .filter(person -> "A11".equals(person.getId()))
            .findAny()
            .map(person -> {
                person.setSomeField("some-value");
                return person;
            });

这段代码对我来说很有用,但我不确定这是为了实现什么,我正在使用它。映射我并不真正需要的返回值,所以我想知道是否有更好的方法来实现这一点?

共有2个答案

公西俊才
2023-03-14

如果您知道只有一个人具有id,并且您想利用findAny()的性能优势,另一种选择是:

persons.stream()
  .filter(person -> "A11".equals(person.getId()))
  .findAny()
  .ifPresent(person -> person.setSomeField("some-value"));
焦同
2023-03-14

找到所有具有某个给定id的人的简单解决方案是。为他们设置场地。

persons.stream().filter(p -> "id".equalsIgnoreCase(p.getId())).forEach(person ->
            person.setSomeField("some-value"));
 类似资料:
  • 我正在使用XPath/CSS和Selenium来定位网站上的元素。我想创建一个方法,在这个方法中,我遍历一个定位器列表(XPath/CSS),然后程序选择哪个有效。换句话说,它从定位器1开始-如果定位器存在,它将返回true并存在循环。否则,它将移动到列表中的下一个定位器。一旦用完所有CSS定位器,它就会转到XPath等等。 目前,我正在考虑如下实施: 然后,我计划为每种定位器类型调用此方法(一次

  • 问题内容: 例如: 上面的代码不执行任何操作,因为条件不是通过引用获得的。正确的方法是什么? 问题答案: 您可以使用: 但是,总的来说,这些东西在使用辅助函数和列表理解时会更加干净: 应该注意的是,第二种解决方案不会适当地更新列表-换句话说,如果您对此列表有其他引用,则它们不会受到影响。如果需要,可以使用切片分配很容易地进行替换:

  • 问题内容: 我了解在Java中,不应在遍历Java时对其进行修改,例如删除或添加元素。但是,如何更改列表中的元素呢?例如,如果我们有 因此,我不是在谈论修改存储在某个元素上的对象;我说的是改变对象是 什么 。List的大小未更改,但是索引处的对象正在更改,因此从技术上讲,List也在被修改。我的老板声称此代码很好(并且确实可以正常工作),但我仍然认为它是不正确的。是否可以使用ListIterato

  • 我有一个自定义对象列表(

  • 有一个可选的可选列表,比如: 如何遍历打印字符串的和? 有一个可选的可选流怎么样? 更新:感谢您的答案,optionalStream(非嵌套)的解决方案:

  • 问题内容: 我正在尝试对通过document.querySelectorAll查询的选定元素进行循环,但是如何? 例如,我使用: 输出: 我的问题是,最后此方法返回了3个额外的项目。我该怎么做呢? 问题答案: 不建议对数组和类似数组的对象使用循环-您会明白为什么。不仅可以有数字索引项,例如属性或某些方法,还可以遍历所有这些项。使用任一 要么 如果数组中的某些元素可能是虚假的(不是您的情况),则无法