gpt4 book ai didi

java - 将泛型添加到 ArrayUtils.toMap

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:15 25 4
gpt4 key购买 nike

有一个来自 Apache 的开源 util 库,我在其中找到了一种将数组转换为映射的方法:

public static Map toMap(Object[] array) {
if (array == null) {
return null;
}
final Map map = new HashMap((int) (array.length * 1.5));
for (int i = 0; i < array.length; i++) {
Object object = array[i];
if (object instanceof Map.Entry) {
Map.Entry entry = (Map.Entry) object;
map.put(entry.getKey(), entry.getValue());
} else if (object instanceof Object[]) {
Object[] entry = (Object[]) object;
if (entry.length < 2) {
throw new IllegalArgumentException("Array element " + i + ", '"
+ object
+ "', has a length less than 2");
}
map.put(entry[0], entry[1]);
} else {
throw new IllegalArgumentException("Array element " + i + ", '"
+ object
+ "', is neither of type Map.Entry nor an Array");
}
}
return map;
}

因为我不喜欢警告,所以我尝试添加泛型。但我不知道如何将数据类型从输入数组传输到输出映射。

这可能吗?

最佳答案

只有创建两个单独的方法才有可能:一个处理 Map.Entry 元素,另一个处理“数组”元素(例如 {"RED", "#FF0000"}).这是代码:

public static <K, V> Map<K, V> toMap(Map.Entry<K, V>[] array) {
if (array == null) {
return null;
}

final Map<K, V> map = new HashMap<K, V>((int) (array.length * 1.5));
for (int i = 0; i < array.length; i++) {
Map.Entry<K, V> entry = array[i];
map.put(entry.getKey(), entry.getValue());
}
return map;
}

@SuppressWarnings("unchecked")
public static <K, V> Map<K, V> toMap(Object[][] array) {
if (array == null) {
return null;
}

final Map<K, V> map = new HashMap<K, V>((int) (array.length * 1.5));
for (int i = 0; i < array.length; i++) {
Object[] entry = array[i];
map.put((K) entry[0], (V) entry[1]);
}
return map;
}

尽管有些代码是重复的,但可以说它更优雅。恐怕第二种方法没有更好的解决方案; array 只能在运行时具体化。因此,必须进行“未经检查”的转换。

关于java - 将泛型添加到 ArrayUtils.toMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com