2016-12-20 4 views
0

Я хочу добавить значения в Set, который является значением в Map. т.е. Map <String,HashSet<String>> .. мой код:add function in List/Set показывает логическое значение

fieldMap = new LinkedHashMap<String, HashSet<String>>(); 

    if(fieldMap.get(qName)!=null){ 
            HashSet<String> tempSet = fieldMap.get(qName); 
            tempSet.add(//String); 
            fieldMap.put(qName, tempSet);} 

здесь я хотел бы поставить значения непосредственно как: fieldMap.put(qName,fieldMap.get(qName).add(//String)) .. Так что я могу заменить выше 3 строки в цикле. Но когда я даю 'add' функция, появляется сообщение об ошибке: «The method put(String, HashSet<String>) в типе HashMap<String,HashSet<String>> не применимо для аргументов (String, boolean)». Может кто-нибудь объяснить, почему эта ошибка наступает. Также нам нужно выполнить это шаг за шагом?

ответ

1

Проблема в том, что Set.add возвращает логическое значение, а не набор. Возвращаемое значение boolean указывает, было ли добавлено значение в набор. Таким образом, вы пытаетесь добавить логическое значение в качестве значения для карты.

Однако нет необходимости продолжать добавлять набор обратно в карту. Вы можете просто получить набор и добавить новое значение к нему:

if (fieldMap.containsKey(qName)) 
    fieldMap.get(qName).add(value); 
+0

fieldMap.get (qName) .add (значение); эта строка показывает только указанную выше ошибку – Kaira

+0

Извините, что это невозможно. Ошибка: «Метод put (String, HashSet) в типе HashMap> не применим для аргументов (String, boolean)». В заявлении, которое я поставил, нет метода «put», поэтому он не может дать эту ошибку. – sprinter

+0

это правильно только ..! Большое спасибо.. – Kaira

1

Это то, что новый метод Java 8 в Map<K,V> специально разработан для:

V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 

В вашем случае

fieldMap.computeIfAbsent(qName, k->new HashSet<>()).add(someString); 

computeIfAbsent проверяет наличие qName. Если он не существует, вызывается «функция отображения» (new HashSet<>()) и результат добавляется к Map. Затем возвращается значение (либо существующее, либо новое), и вы завершаете, вызывая add() на HashSet.