[英]How to build a new list containing all entries from existing list AND a copy of each entry with one field modified?
我有一个名为列表的 Object 列表。 使用 list.stream(),我需要创建一个相同 Object 的新列表,其中新列表包含所有原始条目,并且新列表包含每个条目的副本,其中一个字段已修改。 我知道如何使用 list.stream() 两次,但我想在 1 stream 下进行。
这就是我使用 list.stream() 两次完成任务的方式
newList = list.stream().collect(Collectors.toList());
newList.addAll(list.stream().map(l -> {SomeObject a = new SomeObject(l);
a.setField1("New Value");
return a;
}).collect(Collectors.toList())
);
使用flatMap
(假设您不介意交错的原始值和派生值):
newList = list.stream()
.flatMap(l -> {
SomeObject a = new SomeObject(l);
a.setField1("New Value");
return Stream.of(l, a);
})
.collect(toList());
如果只是不想使用stream()
两次,则可以避免使用第一个addAll
; 以及第二个不必要的collect
:
newList = new ArrayList<>(list.size() * 2);
newList.addAll(list);
list.stream()
.map(l -> {
SomeObject a = new SomeObject(l);
a.setField1("New Value");
return a;
})
.forEach(newList::add);
如果你想要 objct 然后处理 object 等等,那么在你的新列表中,你可以尝试这样的事情:
List<String> list = List.of("a", "b", "c" );
List<String> answer = list.stream()
.map(s -> List.of(s,s+"1"))
.flatMap(List::stream).collect(Collectors.toList());
System.out.println(answer);
Output:
[a, a1, b, b1, c, c1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.