为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕仙森 2021-06-03 17:37:57
假设我有这么一段代码: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 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

这将是有争议的,但我会使用peek():


myStream.parallel()

        .filter(Objects::nonNull)

        .peek(item -> item.setDate(item.getOneDate()))

IMO,这个用例使许多反对用于状态修改的论点无效peek(),因为它本质上是无副作用的(假设不再可以从流源访问元素)。它绝对符合唯一严格的不干扰要求。


查看完整回答
反对 回复 2021-06-10
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

如果这必须在操作后完成collect,只需使用forEach

map.forEach((k, v) -> {...});

如果您只对价值观感兴趣:

map.values().forEach(item -> {...});

或只有键:

map.keySet().forEach(item -> {...});


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信