博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK 1.8 List多条件分组
阅读量:6957 次
发布时间:2019-06-27

本文共 2036 字,大约阅读时间需要 6 分钟。

hot3.png

业务描述:根据 gameId serverId 两个参数 获取 serverName 。在遍历时需要发送HTTP请求获取。这时想要优化请求次数,便是对List分组。减少发送次数。

这里使用了,Stream 的 分组,这时是使用了两个条件gameId 和 serverId。

final static Cache
SERVER_NAME_CACHE = CacheBuilder .newBuilder() // 设置cache的初始大小为20,要合理设置该值 根据分页数量 .initialCapacity(20) // 设置并发数为5,即同一时间最多只能有5个线程往cache执行写入操作 可以不设置 .concurrencyLevel(5) // 设置cache中的数据在写入之后的存活时间为10分钟 .expireAfterWrite(10, TimeUnit.MINUTES) // 构建cache实例 .build(); /** * 方法说明 : 根据游戏id 服务器id 获取服务请名称时 合并 请求 并缓存 */ private ConcurrentMap
mergeRequestWithServerName( List
list) { ConcurrentMap
cacheMap = SERVER_NAME_CACHE.asMap(); // 根据 GameId ServerId 分组 Map
>> group = list .parallelStream() .collect(Collectors.groupingBy(WoWorkOrderVo::getGameId, Collectors.groupingBy(WoWorkOrderVo::getServerId))); // 组织 map k->gameId v->serverId Map
map = new IdentityHashMap<>(); Iterator
>>> itOut = group .entrySet().iterator(); // 遍历外层 while (itOut.hasNext()) { Entry
>> entry = itOut .next(); Integer keyOut = entry.getKey(); // 获取内层值 Map
> value = entry.getValue(); // 遍历内层 Iterator
>> itIn = value .entrySet().iterator(); while (itIn.hasNext()) { Entry
> next = itIn.next(); Integer keyIn = next.getKey(); map.put(new Integer(keyOut), new Integer(keyIn)); } } ConcurrentMap
gameServerNameMap = new ConcurrentHashMap<>(); map.forEach((k, v) -> { if (StringUtils.isBlank(cacheMap.get(k + "&" + v))) { gameServerNameMap.put(k + "&" + v, agentService.getGameServerName(k, v)); SERVER_NAME_CACHE.put(k + "&" + v, agentService.getGameServerName(k, v)); } }); LOGGER.info("【SERVER_NAME_CACHE 缓存MAP的信息{}】", cacheMap.toString()); return cacheMap.isEmpty() ? gameServerNameMap : cacheMap; }

其实以上方法,是将简单问题复杂化了。线上没有使用这个方法。但是这里的多条件分组,学习了。

转载于:https://my.oschina.net/u/3418748/blog/1612170

你可能感兴趣的文章
给定一个串,去掉连续的重复字母,
查看>>
我的友情链接
查看>>
jenkins+docker的简单项目部署
查看>>
MSR2010配置小记
查看>>
URL参数解析为一个对象
查看>>
微信video标签全屏无法退出bug
查看>>
[转]PostgreSQL 中文资料汇总
查看>>
那些被疯狂追求的女孩,后来怎么样了?
查看>>
(转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)...
查看>>
mysql之触发器
查看>>
C 入门 第七节 结构体
查看>>
linux下安装svn
查看>>
Linux下搭建ftp服务器(转载)
查看>>
hadoop之 HDFS-Hadoop存档
查看>>
LeetCode 49. Group Anagrams
查看>>
JavaScript实现本地图片上传前进行裁剪预览
查看>>
低端手机刷机--[2.3 固件ROM] GT-i5508、5500刷安卓2.3.7 包含(教程 刷机包 等)
查看>>
细说JS中的原型与原型链
查看>>
Guava工具类
查看>>
数据表的基本操作
查看>>