Java传递Map到一对varargs

时间:2015-03-04 10:23:52

标签: java dictionary variadic-functions

使用普通数组执行此类操作:

public class TestVarArgs {
    public static void main(String[] args) {
        int[] array = new int[4];
        for (int i = 0; i < array.length; i++) {
            System.out.println(i);
        }
        testThis(array);
    }
    public static void testThis(int... args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(i);
        }
    }
}

现在我如何使用地图做到这一点?

我想将地图传递给接收对的varargs的方法。

将Map传递给Entry.Map的varargs不起作用。

2 个答案:

答案 0 :(得分:4)

Java varargs等同于数组,编译器支持在调用方法时使数组在场景后面。

如果您的方法采用

void myMethod(Map.Entry<String,String>>... args)

相同
void myMethod(Map.Entry<String,String>>[] args)

所以你可以通过插入转换到数组来调用它,如下所示:

Map<String,String> myMap = ...
...
myMethod((Entry<String,String>[])myMap.entrySet().toArray(new Map.Entry[myMap.size()]));

答案 1 :(得分:0)

您无法将Collection传递给varargs参数 我认为最简单的方法是从密钥集创建一个密钥数组。

Map<K, V> aMap ;
Set<K> keySet = aMap.keySet();
K[] keyArray = keySet.toArray(new K[keySet.size()]);

aMethodWithVarargs(keyArray);

当然,您可以使用Entry.Map

的集合执行此操作
Map<K, V> aMap ;
Set<Entry.Map<K, V>> entrySet = aMap.entrySet();
Entry.Map<K, V>[] entryArray = keySet.toArray(new Entry.Map<K, V>[keySet.size()]);

aMethodWithVarargs(entryArray);