假设我有这么一段代码: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?
2 回答
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
温温酱
TA贡献1752条经验 获得超4个赞
这将是有争议的,但我会使用peek():
myStream.parallel()
.filter(Objects::nonNull)
.peek(item -> item.setDate(item.getOneDate()))
IMO,这个用例使许多反对用于状态修改的论点无效peek(),因为它本质上是无副作用的(假设不再可以从流源访问元素)。它绝对符合唯一严格的不干扰要求。
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
如果这必须在操作后完成collect
,只需使用forEach
:
map.forEach((k, v) -> {...});
如果您只对价值观感兴趣:
map.values().forEach(item -> {...});
或只有键:
map.keySet().forEach(item -> {...});
添加回答
举报
0/150
提交
取消