2012-06-07 2 views
0

Я получаю ошибку на этой линииметод поставил (String, ArrayList <Integer>) в типе TreeMap <String, ArrayList <Integer>> не применяется для аргументов (String, Boolean)

tm.put(temp[j],tm.get(temp[j]).add(i)); 

когда я был компиляции моей программы в затмении:

The method put(String, ArrayList<Integer>) in the type TreeMap<String,ArrayList<Integer>> is not applicable for the arguments (String, boolean) 

Ниже приведены мои коды:

TreeMap<String, ArrayList<Integer>> tm=new TreeMap<String, ArrayList<Integer>>(); 
String[] temp=folders.split(" |,"); 
for (int j=1;j<temp.length;j++){ 

      if (!tm.containsKey(temp[j])){ 
       tm.put(temp[j], new ArrayList<Integer>(j)); 
      } else { 
       tm.put(temp[j],tm.get(temp[j]).add(j)); 
      } 
     } 

в папки что-то вроде этого

folders="0 Jim,Cook,Edward"; 

Я задаюсь вопросом, почему нет никакой ошибки на прежнем поставил метод, но только на второй.

+0

Какая ошибка возникает? –

ответ

2

ArrayList.add(E) возвращает boolean, вы просто не можете их связать.

tm.get(temp[j]).add(j); достаточно, вам не нужно снова put.

new ArrayList<Integer>(j) не даст вам архариста одного элемента, аргументом является начальная емкость.

Затем вы должны объявить tm как Map<String, List<Integer>>.

Map<String, List<Integer>> tm=new TreeMap<String, List<Integer>>(); 
String[] temp=folders.split(" |,"); 
for (int j=1;j<temp.length;j++){ 

    if (!tm.containsKey(temp[j])){ 
     tm.put(temp[j], new ArrayList<Integer>()); 
    } 
    tm.get(temp[j]).add(j); // This will change the arraylist in the map. 

} 
+0

Чувак спасибо .... – Cybershoe

0

ArrayList.add(E) возвращает значение boolean, и поэтому вы не можете включить вызов в один оператор.

Вам необходимо передать объект ArrayList<Integer> в качестве второго аргумента в метод put.

0

ArrayList::add returns true in this scenario; то есть он не возвращает новый ArrayList. Попробуйте клонировать список, добавляя к нему, а затем передавая его в качестве аргумента.

Смежные вопросы