如何实现与addToList功能类似、支持自定义键的泛型addToMap方法
实现代码
import java.util.Map; import java.util.Objects; import java.util.function.Function; public static <K, V> V addToMap(final V element, final Map<K, V> map, final Function<? super V, ? extends K> keyMapper) { Objects.requireNonNull(map); Objects.requireNonNull(keyMapper); if (Objects.nonNull(element)) { K key = keyMapper.apply(element); map.put(key, element); } return element; }
说明
- 泛型定义:
K为Map的键类型,V为Map的值类型,与你传入的元素类型一致 - 第三个参数
Function<? super V, ? extends K> keyMapper就是你需要的键生成逻辑,支持传入lambda表达式或者方法引用,你提到的场景可以直接写addToMap(car, carMap, s -> s.getId())或者简化为方法引用形式addToMap(car, carMap, Car::getId),完全符合你的预期调用方式 - 如果你不希望相同key覆盖Map中已有的旧值,可以将
map.put(key, element)替换为map.putIfAbsent(key, element)即可
内容的提问来源于stack exchange,提问作者Girls are beautiful
相关产品推荐
相关产品推荐

