【问题标题】:Update a list if there is any matching item [closed]如果有任何匹配项,则更新列表[关闭]
【发布时间】:2020-07-27 07:18:57
【问题描述】:

如何在流中编写以下代码? topicsArrayList<Topic>

public void updateTopic(Topic topic) {
    for (int i = 0; i < topics.size(); i++) {
        Topic t = topics.get(i);
        if (t.getId().equals(topic.getId())) {
            topics.set(i, topic);
            return;
        }
    }
}

【问题讨论】:

  • 你试过了吗?如果你这样做,你会学得更快。
  • 根据您的逻辑,您可能希望使用Map&lt;String,Topic&gt; 而不是List&lt;Topic&gt;。然后您的整个代码可以替换为topics.replace(topic.getId(),topic);

标签: java java-8 java-stream


【解决方案1】:

您可以通过如下方式导入Intstream来使用它

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多