2013-08-30 4 views
1

У меня есть список, определяемый как - List iAmAListWithNoGenricType;Преобразование объектов

Строки хранятся в списке.

Я передаю этот список к способу, который

paramMap = populateMap(list,paramMap); 
public Map<Object,Object> populateMap(List list,Map<Object,Object> paramMap){ 
paramMap.put("key",list); 
return paramMap; 

Теперь делать это hashcodes в настоящее время хранится в карте.

ключ = {#code,#code......}

Я попытался это: -

List<String> newList = new ArrayList<String>(); 
for(String item:list){ 
    newList.add(item); 
} 

, а также попытался преобразования объекта в строку, но все потерпели неудачу. итератора пользователя, а так: -

Object element=itr.hasNext(); 
newList.add((String)element); 

Кроме того,

newList.add(item.toString()); 

Но сбой системы.

Каков выход?

+0

Покажите нам, как вы определяете 'itr' И StackTrace также. –

+0

Как вы называете метод populateMap? Можете ли вы показать строку кода, в которой вы передаете фактические аргументы методу populateMap. – MansoorShaikh

+0

Итератор iterator = list.iterator(); – Ciff

ответ

0
for (Object o : list) { 
    newList.add((String) o); 
} 

Обратите внимание, что у вас не должно быть списка без параметра типа, если это вообще возможно.

В этой попытке:

List<String> newList=new ArrayList<String>(); 
for(String item:list){ 
newList.add(item); 
} 

Java кажется, что статический тип элементов list является Object. Вы не можете назначить их переменной String без трансляции, поэтому Java отказывается разрешить ваш код.

В этой попытке:

Object elemnt=itr.hasNext(); 
newList.add((String)element); 

hasNext не возвращает следующий элемент. Он возвращает true, если в списке больше элементов для перебора. Возвращаемое логическое значение получает autoboxed до Boolean и хранится в elemnt, а затем попытка лить Boolean в String не выполняется.

В этой попытке:

newList.add(item.toString()); 

toString не так, как вы приводите то, что вы знаете, является String к статическому типу String, но это не вызвало бы сбой или ошибка компиляции сама по себе. Вероятно, у вас было больше ошибок где-то в другом месте.

+0

Я думаю, что все дело в том, что в списке нет типа. –

+0

Я пробовал это. Он не работает. – Ciff

+0

@Ciff: Вероятно, у вас больше ошибок в коде, который вы не показывали. – user2357112

0
Object elemnt=itr.hasNext(); 
newList.add((String)element); 

Это происходит из-за того, что Iterator.hasNext() является булевым. Правильный код:

while(itr.hasNext()) 
    newList.add((String)itr.next()); 

Или что-то в этом роде.

0

Измените свой код, как показано ниже: Не нужно передавать карту методу, если вы хотите вернуть ту же карту из метода.

public Map<Object,Object> populateMap(List list){ 
    Map<Object,Object> paramMap = new HashMap<Object,Object>(); 

    if(list != null & list.size() > 0){ 
     int key = 1; 
     for(Object obj : list){ 
      paramMap.put(("Key"+key), obj); 
      key++; 
     } 
    } 
    return paramMap; 
} 

Вызов ваш метод, как это:

Map<Object,Object> paramMap = populateMap(list); 
1

Первая вещь, вы не инициализируется список. Во-вторых, вы должны предоставить исключение, которое вы получаете вместо публикации «Системные сбои».

Здесь у вас есть элемент, который имеет тип Boolean, так как itr.hasNext() возвращает true ИЛИ false на основании того, существует ли какой-либо следующий элемент в списке или нет. Затем вы использовали это в sysout, где вы можете получить classcastexception. Поскольку вы не можете использовать Boolean для String.!

Так используйте hasNext метод таким образом, может помочь -

while(itr.hasNext()) { 
    //operation on list like ADD 
}