java流中的映射与应用
我现在有下面这样的东西java流中的映射与应用,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我现在有下面这样的东西 List<String> myNewList = myList .stream() .map(item->{ return mappedItem }) .collect(Collect
List<String> myNewList = myList
.stream()
.map(item->{
return mappedItem
})
.collect(Collectors.toList());
repository.save(myNewList);
myOptional
.map(item -> {
return mappedItem
})
.ifPresent(newItem -> {
repository.save(newItem);
});
我想知道我是否可以在网上做类似的事情。有没有办法收集新的列表
并在新列表上应用我的功能,而不是声明myNewList
更新:根据@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;}));
您可以在存储库
类中声明特殊方法:
class Repository {
Collector<MyItemType, ?, List<MyItemType>> saving() {
return Collectors.collectingAndThen(Collectors.toList(),
list -> {this.save(list);return list;});
}
void save(List<MyItemType> list) { ... }
}
重点是什么?如果您不想使用
myNewList
变量,只需将完整的流语句传递到save
。那么,myOptional
方法似乎更简洁。将整个流语句包装到另一个函数中会使代码看起来更复杂。实际上,您正在创建一个新的列表,其中包含一个相同的项。这真的是你想要的吗?另外item->{return mappedItem;}
与item->mappedItem
..@assylias谢谢,return mappedItem
只是一个参考。在我的原始代码中,我有一组语句来确定新的值。谢谢你的回答。
myList.stream().map(..).collect(repository.saving());