![](/img/trans.png)
[英]Hashmap with Streams in Java 8 Streams to collect value of Map
[英]Java streams map with sideeffect and collect or foreach and populate a result-list
我有一段看起来像这样的代码。
我已经阅读了关于此的两个相互矛盾的(?)“规则”。
.map
不应该有副作用.foreach
不应该更新一个可变变量(所以如果我重构为使用的foreach和填充一个结果列表,然后打破那)在提到http://files.zeroturnaround.com/pdf/zt_java8_streams_cheat_sheet.pdf我该如何解决它以便我使用流并仍然返回一个列表,或者我应该简单地跳过流?
@Transactional
public Collection<Thing> save(Collection<Thing> things) {
return things.stream().map(this::save).collect(Collectors.toList());
}
@Transactional
public Thing save(Thing thing) {
// org.springframework.data.repository.CrudRepository.save
// Saves a given entity. Use the returned instance for further operations as the save operation might have changed the entity instance completely.
Thing saved = thingRepo.save(thing);
return saved;
}
那篇论文不是说共享可变状态吗? 在您的情况下,如果您在方法中声明列表然后使用forEach
,一切都很好。 这里的第二个答案确切地提到了您正在尝试做的事情。
如果您根本不对其进行变异,则几乎没有理由收集一个全新的List
。 除此之外,您的用例基本上是迭代集合中的每个元素,并保存可以通过使用for-each
简单实现的元素。
如果由于某种原因thingRepo.save(thing)
使对象发生变异,您仍然可以返回相同的集合,但此时它是一个隐藏的变异,根本不可见,因为thingRepo.save(thing)
不建议这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.