gpt4 book ai didi

java - 从流中操作数据而不是打开两个流

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:40 24 4
gpt4 key购买 nike

所以这更多的是一个性能或最佳实践问题。我得到了一个包含自定义数据结构条目的列表。这看起来像:

public class Entry {
private int id;
private String title;
private String description;
....
}

因此,当我想从列表中删除条目并将其附加到另一个列表时,我会这样做:

Entry id = entries.stream().filter(e -> Integer.toString(e.getId()).equals(args[1]))
.map(e -> e).findAny().get();

entries.stream().filter(e -> Integer.toString(e.getId()).equals(args[1]))
.forEach(entry -> {
doneEntries.add(new Entry(entry.getTitle(),
entry.getDescription(),
"done",
entry.getTags(),
doneId));
doneId+=1;
});
entries.remove(id);

我知道流不会操纵数据,它们会创建新数据,因此我无法删除第二个流中的条目。这会导致 ConcurrentModificationException。在我看来,我的结果只是一种解决方法,性能不是很好。

如何改进此代码部分?

提前致谢

最佳答案

试试这个:

entries = entries.stream().filter(e -> {
boolean result = true;
if (!Integer.toString(e.getId()).equals(args[1])) {
doneEntries.add(new Entry(e.getTitle(), e.getDescription(), "done", e.getTags(), doneEntries.size() + 1));
result = false;
}
return result;
}).collect(Collectors.toList());

关于java - 从流中操作数据而不是打开两个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com