Sri*_*rik 4 java lambda java-8 java-stream
我目前有类似下面的内容
List<String> myNewList = myList
.stream()
.map(item->{
return mappedItem
})
.collect(Collectors.toList());
repository.save(myNewList);
Run Code Online (Sandbox Code Playgroud)
在Optional中,我可以使用ifPresent方法对映射项执行操作,如下所示
myOptional
.map(item -> {
return mappedItem
})
.ifPresent(newItem -> {
repository.save(newItem);
});
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以做上面这样的事情.而不是声明myNewList,有没有一种方法可以收集新的List并在新列表中应用我的功能?
更新:根据@ tagir-valeev的回答,我修改了我的代码如下
myList
.stream()
.map(item->{
return mappedItem
})
.collect(Collectors.collectingAndThen(Collectors.toList(),
list -> {
repository.save(list);
return list;
}
));
Run Code Online (Sandbox Code Playgroud)
您可以像这样创建自定义收集器:
myList.stream().map(..)
.collect(Collectors.collectingAndThen(Collectors.toList(), repository::save));
Run Code Online (Sandbox Code Playgroud)
如果save返回类型是void,那么因为你需要返回一些东西会更丑collect:
myList.stream().map(..)
.collect(Collectors.collectingAndThen(Collectors.toList(),
list -> {repository.save(list);return list;}));
Run Code Online (Sandbox Code Playgroud)
您可以在Repository班级中声明特殊方法:
class Repository {
Collector<MyItemType, ?, List<MyItemType>> saving() {
return Collectors.collectingAndThen(Collectors.toList(),
list -> {this.save(list);return list;});
}
void save(List<MyItemType> list) { ... }
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
myList.stream().map(..).collect(repository.saving());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |