收集后在Java 8流中调用对象的方法

假设我有这么一段代码:


Map<Consumer, Item> map = myStream.parallel()

        .filter(Objects::nonNull)

        .collect(Collectors.toConcurrentMap(e->e,

                e->e, mergeFunction));

我想做的是在收集完成后对流的每个对象调用一个方法。


例如,


item.setDate(item.getOneDate());

在代码按顺序循环遍历项目之前,放入地图,并在最后调用一些类似上面的代码,设置“日期”。


while(iterator.hasNext()) {

   Item blah = iterator.next();

   ....

   // code for putting into map

   ...

   blah.setDate(blah.getOneDate());

}

不确定如何使用 Java 8 流执行此操作。forEach? peek?


慕仙森
浏览 153回答 2
2回答

温温酱

这将是有争议的,但我会使用peek():myStream.parallel()&nbsp; &nbsp; &nbsp; &nbsp; .filter(Objects::nonNull)&nbsp; &nbsp; &nbsp; &nbsp; .peek(item -> item.setDate(item.getOneDate()))IMO,这个用例使许多反对用于状态修改的论点无效peek(),因为它本质上是无副作用的(假设不再可以从流源访问元素)。它绝对符合唯一严格的不干扰要求。

一只名叫tom的猫

如果这必须在操作后完成collect,只需使用forEach:map.forEach((k,&nbsp;v)&nbsp;->&nbsp;{...});如果您只对价值观感兴趣:map.values().forEach(item&nbsp;->&nbsp;{...});或只有键:map.keySet().forEach(item&nbsp;->&nbsp;{...});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java