首页IT科技java中的map如何使用(JAVA里Map的一些常用方法)

java中的map如何使用(JAVA里Map的一些常用方法)

时间2025-09-19 05:53:07分类IT科技浏览6449
导读:Map的常用方法 案例1 场景:一张建行用户体验金信息大表(百万级别),里面存在一个字段对多条数据,需要统计某个字段的多条数据累加值以供于别的服务调用。...

Map的常用方法

案例1

场景:一张建行用户体验金信息大表(百万级别)                  ,里面存在一个字段对多条数据                           ,需要统计某个字段的多条数据累加值以供于别的服务调用                  。

优化前解决:直接查出来一个大list给到另一个服务         ,再另外一个服务里有笛卡尔积算出累加值(笛卡尔积后得到jvm需运算56亿次)                  ,程序直接接近崩溃                           ,故需优化                           。

优化思路:首先由于该表是一张大表         ,所以我们不能直接把这百万级别轰到内存中(不然会OOM)         ,我们先分组取出                           ,分组迭代使用Map的Merge方法(源码如下)                  ,该方法接收了三个参数         ,一个是Key                           ,一个是value                  ,一个是remappingFunction,简单理解                           ,如果给定的key不存在                           ,它就变成了 put(key, value) ;但是,如果 key 已经存在一些值                  ,我们 remappingFunction 可以选择合并的方式                           ,然后将合并得到的 newValue 赋值给原先的 key         。

// 源码如下 default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); Objects.requireNonNull(value); V oldValue = get(key); V newValue = (oldValue == null) ? value : remappingFunction.apply(oldValue, value); if (newValue == null) { remove(key); } else { put(key, newValue); } return newValue; } 案例2

场景:逻辑需要移除map里特定的key和value元素

优化前解决:遍历找出对应条件         ,程序效率不高                  ,很多无效判断

优化思路:使用map jdk1.8新增方法一步解决                           ,remove方法         ,该方法有两个入参         ,一个是key                           ,一个是value         。基本理解                  ,仅当指定的 key 关联到指定的 value 时         ,才删除指定的项                           ,删除成功返回 true                           。

// 源码如下 default boolean remove(Object key, Object value) { Object curValue = get(key); if (!Objects.equals(curValue, value) || (curValue == null && !containsKey(key))) { return false; } remove(key); return true; } Map的另外一些新增方法示例 // 原有的Put方法                  ,是当Key存在时则替换;而putIfAbsent方法,则是当存在Key忽略Put操作不替换 map.putIfAbsent("K1001", "K1001-1"); // 如果Key存在                           ,则将函数的运算结果作为这个Key对应的Value的新值Put进去 map.computeIfPresent("K1001", (k, v) -> k + v); // 如果Map中不存这个Key对应个的键值对                           ,则Put这个Key和将Key带入函数运算后的结果为Value的键值对;如果Key存在,则忽略Put操作 map.computeIfAbsent("K1002", k -> k); // 只有当Map中键值对同时等于参数Key和Value时才执行删除 map.remove("K1002", "K1002"); // 从Map中获取指定Key的Value的值                  ,如果不存在则返回指定的默认值 String vle = map.getOrDefault("K1002", "V1002"); System.out.println(vle); // 遍历 forEach map.forEach((k, v) -> System.out.println(k + " --> " + v));

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
mac系统中启动win(Mac系统中使用QuickTime Player实现屏幕录像图文教程) 关键词拓展是什么意思?如何进行关键词拓展的(关键词拓展是什么意思?如何进行关键词拓展?)