我有一段代码,看起来像这样。
我读到了两个相互矛盾的(?)关于这一点的“规则”。
。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;
}
如果你根本不改变它,几乎没有理由收集一个全新的列表。除此之外,您的用例基本上是在集合中的每个元素上迭代,并保存可以通过对每个元素使用
来实现的内容。
如果出于某种原因
thingRepo。save(thing)
变异对象您仍然可以返回相同的集合,但在这一点上,它是一个隐藏的变异,因为thingRepo根本不可见。保存(东西)
不建议这样做。
那篇文章不是说共享可变状态吗?在您的情况下,如果在方法中声明列表,然后使用forEach
,一切都很好。这里的第二个答案正好提到了您正在尝试做的事情。
我有这个简单的Bean类: 在我的主类中,我在列表中添加了一些信息: 现在我想将图书列表转换为以下形式的地图: 因此,输出(上面的地图)如下所示: 因此,我需要按isbn作为关键字和作者作为值对条目进行分组。一个isbn可以有多个作者。 我尝试如下: 不能更改bean的格式。如果bean有字符串值而不是map,我可以这样做,但是要坚持使用map。 我已经写了传统的java 6/7方式来正确地做这件
我有一个<code>Person<code>对象的集合:。 (实体结构由第三方提供。 现在,我需要一张
假设你有一张这样的物体地图(尽管想象它更大): rtype=133,有两个! 我想对Streams做的是这样的: 我在理解Collectors&groupBy的工作原理时遇到了一些麻烦,但我想这可能会用于本例。 在Java streams API中进行编码的正确方法是什么? 我很难找到类似的地图例子(人们在他们的例子中更多地使用列表)
我有一个地图列表,并希望对某些列进行分组和求和。 地图列表:
问题内容: 在上面的代码中,我可以期望中的名称顺序始终与中的顺序相同吗? 问题答案: 是的,只要您没有将并行流显式转换为模式,即使您正在使用并行流,也可以期望这样做。 顺序永远不会在顺序模式下更改,但可能会在并行模式下更改。流变得无序: 如果您通过调用将其明确转换为无序模式 如果流源报告它是无序的(例如,流是无序的,因为顺序取决于实现,因此您不能依赖它) 如果您使用的是无序终端操作(例如,进行操作