java - 使用流更新列表中的单个对象

标签 java java-8

我有一个对象列表。我需要更新列表中与我的过滤器匹配的单个对象。我可以做如下的事情:

List<MyObject> list = list.stream().map(d -> {
    if (d.id == 1) {
        d.name = "Yahoo";
        return d;
    }
    return d;
});

但我担心的是我喜欢迭代整个列表,可能多达 20k 条记录。我可以执行一个 for 循环,然后 break,但我认为这个循环也会很慢。

有什么有效的方法可以做到这一点吗?

最佳答案

使用findFirst,这样在列表中找到第一个匹配元素后,剩余元素将不会被处理

Optional<MyObject> result = list.stream()
                                .filter(obj->obj.getId()==1)
                                .peek(o->o.setName("Yahoo"))
                                .findFirst();

或者

  //will not return anything but will update the first matching object name

                              list.stream()
                              .filter(obj->obj.getId()==1)
                              .findFirst()
                              .ifPresent(o->o.setName("Yahoo"));

关于java - 使用流更新列表中的单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624006/

相关文章:

java 8中的字符串占用内存较少

java - 在 Web 服务器上提供编译脚本

java - 如何在 SWT ListViewer 上捕获 Ctrl 键按下和释放

java - spring security中的配置问题

java - 方法前提条件是否应该进行单元测试?

java - WicketTester 选择 Radio Choice 并单击 DownloadLink

java - lambda 表达式的序列化有哪些安全风险?

java - 为什么类中的Optional成员变量的默认值为null?

java - 如何将带有条件的 for 迭代转换为 Java 8 流

JavaFX WebView 下载