关于getorCreate 方法的作用

来源:7-5 关键词索引对象定义与服务实现

邓武博

2019-02-24

Set<Long> unitIdSet = CommonUtils.getorCreate(key,keywordUnitMap,ConcurrentSkipListSet::new);
unitIdSet.addAll(value);

这两行操作是不是可以这样理解:

  1. 通过getorCreate 创建并返回一个绑定了 keywordUnitMap key 的空集合unitIdSet
  2. 向这个Set集合中添加数据,是会影响 keywordUnitMap key 对应的 value,效果等同与
    keywordUnitMap .put(“key”,unitIdSet) ?
写回答

1回答

张勤一

2019-02-24

同学你好:

Set<Long> unitIdSet = CommonUtils.getorCreate(key,keywordUnitMap,ConcurrentSkipListSet::new);

    从函数定义中可以看到,这句代码的含义是:尝试从 keywordUnitMap 中获取 key(即 Map.get(key)),得到一个 ConcurrentSkipListSet。如果获取不到,则通过 ConcurrentSkipListSet::new 工厂创建一个 ConcurrentSkipListSet 对象。且此时,这个 key 已经 put 到 ConcurrentSkipListSet 中了。

unitIdSet.addAll(value);

    由于获取到的 unitIdSet 是 keywordUnitMap 中的 key 对应到的 value。所以,unitIdSet 的修改可以简单的认为是:keywordUnitMap.put(key, unitIdSet)。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持! 

2
4
慕先生5272158
其实可以这样认为,可以简单解决的,非要装,搞得因语法理解半天
2021-09-10
共4条回复

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2143 学习 · 928 问题

查看课程