gpt4 book ai didi

Java 可变参数和 HashMap 构造函数

转载 作者:行者123 更新时间:2023-12-02 05:51:06 27 4
gpt4 key购买 nike

我想为 HashMap 使用更好的构造函数,所以我写了一个这样的构造函数:

public static Map<S, T> newMap(S obj1, T obj2, Object... objects) {
h = new HashMap<S, T> ();
h.put(obj1, obj2);
... // parse object and put it in h.
}

我的问题是我很少有方法本身采用可变参数并将参数传输到 newMap 方法。

例如,

public static void foo(S arg0, T arg1, Object... kv) {
...
newMap(tmp0, tmp1, kv); // WRONG: kv is an array and not a variadic transfer.
}

并称为:

foo(arg0, arg1, key1, val1, key2, val2);

这工作正常,但是,当调用 newMap 时:

newMap(tmp0, tmp1, tmp2, tmp3, kv);

对 foo 的调用是

foo(arg0, arg1)

那么空数组 [] 位于 kv 中。这会产生解析问题,因为我们现在“对象”数组中的元素数量不均匀。

 objects = { tmp2, tmp3, [] }

是否可以在不遍历 kv 对象数组中的参数并为 newMap 调用重建包含所有对象 [tmp0、tmp1、tmp2、tmp3] 的数组的情况下完成此操作。

引用: Better Map Constructor

最佳答案

您可以这样做。

public static <K, V> Map<K, V> newMap(K key1, V value1, Object... kvs) {
Map<K, V> m = new HashMap<>();
m.put(key1, value1);
addToMap(map, kvs);
return m;
}

private static <K, V> void addToMap(Map<K,V> map, Object[] kvs) {
for(int i = 0; i < kvs.length; i++) {
Object key = kvs[i];
if (key instanceof Object[]) {
addToMap(map, (Object[]) key);
} else if (++i < kvs.length) {
map.put((K) key, (V) kvs[i]);
}
}
}

如果嵌套的 Object[] 是“键”,这将解压它们;如果它们是“值”,它们将保留为 Object[]。

关于Java 可变参数和 HashMap 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524773/

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