Java 如果有任何匹配项,请更新列表

Java 如果有任何匹配项,请更新列表,java,java-8,java-stream,Java,Java 8,Java Stream,如何在流中编写以下代码主题是一个数组列表 public void updateTopic(主题){ 对于(int i=0;itopics.get(i).getId().equals(topic.getId())) .findFirst() .ifPresent(i->topics.set(i,topic)); } 使用Stream::map怎么样?除非ID相等,否则映射到同一对象-然后映射到新对象。这可以通过简单地使用三元运算符来实现 public void updateTopic(Topic

如何在流中编写以下代码<代码>主题是一个
数组列表

public void updateTopic(主题){
对于(int i=0;i
您可以通过如下方式导入
Intstream

import java.util.stream.IntStream; 
public void updateTopic(主题){
IntStream.range(0,topics.size())
.filter(i->topics.get(i).getId().equals(topic.getId()))
.findFirst()
.ifPresent(i->topics.set(i,topic));
}

使用
Stream::map
怎么样?除非ID相等,否则映射到同一对象-然后映射到新对象。这可以通过简单地使用三元运算符来实现

public void updateTopic(Topic topic) {
    topics = topics.stream()
        .map(t -> t.getId().equals(topic.getId()) ? topic : t)
        .collect(Collectors.toList());
}

你试过什么吗?如果你这样做,你会学得更快。根据你的逻辑,你可能想使用
映射
,而不是
列表
。然后整个代码可以替换为
topics.replace(topic.getId(),topic)
public void updateTopic(Topic topic) {
    topics = topics.stream()
        .map(t -> t.getId().equals(topic.getId()) ? topic : t)
        .collect(Collectors.toList());
}