Метод put(String, ArrayList‹Integer›) в типе TreeMap‹String,ArrayList‹Integer›› неприменим для аргументов (String, boolean)

Я получаю сообщение об ошибке в этой строке

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

когда я компилировал свою программу в eclipse:

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";

Мне интересно, почему в первом методе put нет ошибки, а только во втором.


person Cybershoe    schedule 07.06.2012    source источник


Ответы (4)


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

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

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

Затем вы должны объявить 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.

}
person xiaofeng.li    schedule 07.06.2012

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

person Waleed Khan    schedule 07.06.2012

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#add(E)

public boolean add(E e) Добавляет указанный элемент в конец этого списка и возвращает логическое значение. Отсюда и ошибка.

person FSP    schedule 07.06.2012

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

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

person Alex Lockwood    schedule 07.06.2012