2013-09-30 117 views
1

我试图使用具有像这样的方法签名第三方库:作为方法参数传递迭代?

testMethod(Iterable<HashMap<String,Date>>, String, String) 

我怎么能传递一个迭代,以这种方法吗?

我想做一些像下面,但它失败:

HashMap<String,Date> items = new HashMap<String, Date>(); 
items.put("item1", new Date()); 
items.put("item2", new Date()); 

testMethod(items, "more", "data"); 
+0

@DaveNewton目标方法期待'可迭代>' –

+0

@SotiriosDelimanolis噢,糟糕;在我的脑海中,它只是一个值类型列表。它必须具有传染性。 –

+0

@DaveNewton周日不好的情况下,男人! –

回答

3

你需要传递一个Iterable或其亚型之一,例如,ListSet等,所以,你可以在HashMap添加到List,并把它传递:

HashMap<String,Date> items = new HashMap<String, Date>(); 
items.put("item1", new Date()); 
items.put("item2", new Date()); 

List<HashMap<String, Date>> list = new ArrayList<HashMap<String, Date>>(); 
list.add(items); 

testMethod(list, "more", "data"); 

注意,由于参数类型为Iterable<HashMap<String, Date>>,您只能通过 - List<HashMap...>Set<HashMap...>等。您无法通过其中的List<Map..>

-1

你需要一个可迭代传递给该方法。它看起来像HashMap没有实现接口Iterable。你可以继承Map的子类,并将Iterable接口添加到你的子类中,或者传入地图条目列表。

0

你需要用你的Map来包装一些Iterable对象。使用Arrays.asList(T... a)应该在这里工作。

HashMap<String,Date> items = new HashMap<String, Date>(); 
items.put("item1", new Date()); 
items.put("item2", new Date()); 

testMethod(Arrays.asList(list), "more", "data");`