请教 Java 如何更改 map 里面的 key

2019-04-10 15:54:55 +08:00
 13192262269

如题: 例如我一个 map 集合是这样的:

key      value

obj[A]    000

obj[B]    111

obj[C]    222

DDD    333

现在我想要变成这样:

key    value

A      000

B     111

C     222

DDD    333

有什么比较快的方法吗,我目前只会用 entrySet 迭代的方法 感觉比较麻烦

8032 次点击
所在节点    程序员
12 条回复
gosansam
2019-04-10 16:02:23 +08:00
除了迭代器,其他循环方式修改数据会报错的,entrySet 迭代器也不麻烦啊
TommyLemon
2019-04-10 17:06:14 +08:00
明确知道 key 的名称的话,直接
map.put("A", map.remove("obj[A]"))

无法预先知道就只能遍历,然后找到 obj[?] 这种格式的 key,
建议不要修改原来的 map,而是添加到新的 map2
fansangg
2019-04-10 17:08:43 +08:00
debug,然后 setvalue,完美。
notreami
2019-04-10 17:25:11 +08:00
空间换时间,再 new Map 来保存新数据
luozic
2019-04-10 17:40:57 +08:00
copyonwrite
winglight2016
2019-04-10 18:05:40 +08:00
new 个 map 吧,java 没有 python 里面的 rename 这种方法,所以即使有 apply 这种方法也没法直接改名
bk201
2019-04-10 18:08:47 +08:00
rename 的方法无非就是复制然后 rm old
qiyuey
2019-04-10 18:12:16 +08:00
kotlin 是支持的,可以 mapKey
passerbytiny
2019-04-10 18:17:34 +08:00
你这个 key 最多是 java.lang.Object 类型的,在转换的时候要检测和转换类型的,在这大麻烦的前提下,entrySet 迭代根本算不上麻烦。
wysnylc
2019-04-10 19:00:13 +08:00
java8 parallel stream
ZEOH
2019-04-10 19:02:08 +08:00
top1ms
2019-04-11 11:14:13 +08:00
推荐你学习 Java8 lambda 表达式
测试案例如下:

@Test
public void test02(){
Map<String,Integer> map=new HashMap<>();
map.put("zhangsan",123);
map.put("lisi",123);
map.put("wangmazi",123);
Map<String,Integer> keyMap=map.entrySet()
.stream()
.collect(toMap(castKey().compose(Map.Entry::getKey),Map.Entry::getValue));
keyMap.entrySet().forEach(System.out::println);

}

/**
* @Author: zms
* @Description: 转换成一个 function
* @Date: Create on 2019/4/11 10:57
*/
private Function<String, String> castKey() {
return this::opsForKey;
}

/**
* @Author: zms
* @Description: key 转换规则 默认保留自己自己的自己实现
* @Date: Create on 2019/4/11 10:59
*/
private String opsForKey(String key){
//do something ...
//我这里直接就截取原始 key 值的第一位当作新 key 了吼
// 看你的规则 正则拿出大写字母就 ok 了
return key.substring(0, 1);
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/553755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX