简体   繁体   English

Java将Map传递给varargs对

[英]Java pass Map to pair of varargs

Doing something like this with a normal array works: 使用普通数组执行以下操作:

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);
        }
    }
}

Now how can I do this with maps? 现在我该如何使用地图?

I want to pass a map to a method that receives varargs of pairs. 我想将映射传递给接收成对的变量的方法。

Passing a Map to varargs of Entry.Map does not work. 将Map传递给Entry.Map的varargs不起作用。

Java varargs are equivalent to arrays, with compiler support that makes arrays behind the scene when calling the method. Java varargs等效于数组,并具有编译器支持,可在调用该方法时使数组在幕后。

If your method takes, say, 如果您的方法需要,例如,

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

it is the same as 它与

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

so you could call it by inserting a conversion to array, like this: 因此您可以通过插入到数组的转换来调用它,如下所示:

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

You can't pass a Collection to a varargs argument. 您不能将Collection传递给varargs参数。
I think the easiest way is to create an array of key from the key set. 我认为最简单的方法是从密钥集中创建密钥数组。

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

aMethodWithVarargs(keyArray);

Of course, you can do this with the set of Entry.Map 当然,您可以使用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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM