2015-05-06 3 views
0

У меня есть карта, handicapMap, с ключом целых чисел и значениями, которые являются наборами строк. Карта была заполнена тестовыми данными, и теперь я хочу добавить отдельные значения к наборам строк. Я сделал попытку на него, но не могу получить его скомпилироватьДобавление значения к набору строк в пределах карты

public class HandicapRecords 
{ 
    private Map<Integer, Set<String>> handicapMap; 

    public HandicapRecords() 
    { 
     handicapMap = new HashMap<>(); 

    } 

    public void handicapMap() 
    { 
    Set<String> players = new HashSet<>(); 

    players.add("Michael"); 
    players.add("Roger"); 
    players.add("Toby"); 
    handicapMap.put(10, players); 

    players = new HashSet<>(); 
    players.add("Bethany"); 
    players.add("Martin"); 
    handicapMap.put(16, players); 

    players = new HashSet<>(); 
    players.add("Megan"); 
    players.add("Declan"); 
    handicapMap.put(4, players); 
    } 

public void addValue(int aKey, String aValue) 
{ 
handicapMap.put(aKey, players.add(aValue)); \\what I had already tried 
} 

ответ

0

Set#add возвращается boolean, в зависимости главным образом от того, добавлено ли значение - см API.

идиома вы хотите использовать, чтобы добавить новое значение к значению Map (т.е. Set<String>), учитывая его ключ:

handicapMap.get(aKey).add(aValue); 

Вы, вероятно, следует также проверить на нуль Map значения первого:

Set<String> theValue = handicapMap.get(aKey); 
if (theValue != null) { 
    theValue.add(aValue); 
} 
0

Попробуйте это:

import java.util.HashMap; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Set; 

public class HandicapRecords { 

private Map<Integer, Set<String>> handicapMap; 

public HandicapRecords() { 
    handicapMap = new HashMap<>(); 

} 
Set<String> players = new HashSet<>(); 

public void handicapMap() { 

    players.add("Michael"); 
    players.add("Roger"); 
    players.add("Toby"); 
    handicapMap.put(10, players); 

    players = new HashSet<>(); 
    players.add("Bethany"); 
    players.add("Martin"); 
    handicapMap.put(16, players); 

    players = new HashSet<>(); 
    players.add("Megan"); 
    players.add("Declan"); 
    handicapMap.put(4, players); 
} 

public void addValue(int aKey, String aValue) { 
    players.add(aValue); 
    handicapMap.put(aKey, players); 
} 
} 
0

объявите Set<String> players либо как переменную экземпляра, либо локально внутри amethod, и не забудьте проверить, является ли карта null, или нет, поскольку это может вызвать NPE.

public void addValue(int aKey, String aValue) 
{ 
Set<String> players = new HashSet<>(); 
if(handicapMap!=null){ 
handicapMap.put(aKey, players.add(aValue)); 
} 
} 
0

Попробуйте

public void addValue(int aKey, String aValue) 
{ 

    if (handicapMap.containsKey(aKey)) { 

     handicapMap.get(aKey).add(aValue); // May want to add a check if the key has no values 
    } 
} 
0

Прежде всего, необходимо проверить, является ли или нет уже отображение для этого ключа. Если это так, вам нужно только добавить значение к существующему набору. Кроме того, вам нужно сначала создать набор и добавить его на свою карту, а затем добавить новое значение в этот набор.

public void addValue(int aKey, String aValue) 
{ 
    Set<String> players = handicapMap.get(aKey); 

    if (players == null) { 
     players = new HashSet<>(); 
     handicapMap.put(aKey, players); 
    } 

    players.add(aValue); 
}