gpt4 book ai didi

java - 在java流中映射和应用

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:11 25 4
gpt4 key购买 nike

我目前有类似下面的内容

List<String> myNewList = myList
.stream()
.map(item->{
return mappedItem
})
.collect(Collectors.toList());
repository.save(myNewList);

在 Optional 中,我可以使用如下的 ifPresent 方法对映射项执行操作

myOptional
.map(item -> {
return mappedItem
})
.ifPresent(newItem -> {
repository.save(newItem);
});

我想知道我是否可以在直播中做类似上述的事情。除了声明 myNewList,有没有一种方法可以让我收集新的 List 并将我的函数应用于新列表?

更新:根据@tagir-valeev 的回答,我修改了我的代码如下

myList
.stream()
.map(item->{
return mappedItem
})
.collect(Collectors.collectingAndThen(Collectors.toList(),
list -> {
repository.save(list);
return list;
}
));

最佳答案

您可以像这样创建自定义收集器:

myList.stream().map(..)
.collect(Collectors.collectingAndThen(Collectors.toList(), repository::save));

如果 save 返回类型是 void,它会更难看,因为你需要从 collect 返回一些东西:

myList.stream().map(..)
.collect(Collectors.collectingAndThen(Collectors.toList(),
list -> {repository.save(list);return list;}));

您可以在您的Repository 类中声明特殊方法:

class Repository {
Collector<MyItemType, ?, List<MyItemType>> saving() {
return Collectors.collectingAndThen(Collectors.toList(),
list -> {this.save(list);return list;});
}

void save(List<MyItemType> list) { ... }
}

并使用它:

myList.stream().map(..).collect(repository.saving());

关于java - 在java流中映射和应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33418807/

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