Map的computeIfAbsent的使用场景和使用方法
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
...
}
我们在复杂map操作(put操作)时候有的时候不知道此时当前key对应的value值是否存在,这里,我们如果使用常规的代码编写,代码量比较大
例如我们定义一个场景:存在一个数组,我们需要将当前数组中相同的数存储到一个对应List集合中
常规实现:
@Test
public void test02() {
//复杂map的使用场景:首先我们说复杂map,即map的value值为一个list集合或者是一个Set集合,对象或者是其他的集合
//给定一个场景:现在存在一个数组,我们需要将当前数组中相同的数存储到一个对应List集合中
int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5};
Map<Integer, List<Integer>> map = new HashMap<>();
//普通的写法
for (int i = 0; i < nums.length; i++) {
if (!map.containsKey(nums[i])) {
ArrayList<Integer> list = new ArrayList<>();
list.add(nums[i]);
map.put(nums[i],list);
}else {
map.get(nums[i]).add(nums[i]);
}
}
map.forEach((key,value) -> {
System.out.print(key + ": ");
System.out.println(value);
});
}
使用computeIfAbsent方法实现:
@Test
public void test03() {
int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5};
Map<Integer, List<Integer>> map = new HashMap<>();
//我们使用map的computeIfAbsent解决
for (int i = 0; i < nums.length; i++) {
//返回值是该key对应的集合list
map.computeIfAbsent(nums[i], key -> new ArrayList<Integer>());
map.get(nums[i]).add(nums[i]);
}
map.forEach((key,value) -> {
System.out.print(key + ": ");
System.out.println(value);
});
}
输出结果:
1: [1, 1, 1]
2: [2]
3: [3, 3, 3]
4: [4, 4]
5: [5]
6: [6]
7: [7]
9: [9, 9]