繁体   English   中英

Java 流映射与副作用并收集或 foreach 并填充结果列表

[英]Java streams map with sideeffect and collect or foreach and populate a result-list

我有一段看起来像这样的代码。

我已经阅读了关于此的两个相互矛盾的(?)“规则”。

我该如何解决它以便我使用流并仍然返回一个列表,或者我应该简单地跳过流?

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM