2013-09-30 2 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 целевой метод ожидает 'Iterable >' –

+0

@SotiriosDelimanolis Ой, ой; в моей голове это был всего лишь список типов значений. Это должно быть заразительно. –

+0

@DaveNewton Плохой случай понедельника, мужчина! –

ответ

3

Вам нужно пройти Iterable или один из его подтипов, например, List, Set и т.д. Таким образом, вы можете добавить 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

Вам нужно пройти Iterable методу. Похоже, что HashMap не реализует интерфейс Iterable. Вы можете либо подклассифицировать карту, либо добавить интерфейс Iterable в свой подкласс, либо передать список записей вашей карты.

0

Вам необходимо обернуть свою карту некоторым объектом, который является Итерируемым. Использование 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");` 
Смежные вопросы