使用hashset编辑hashmap作为值

时间:2018-05-21 05:43:44

标签: java

我有以下代码:

HashMap<String, HashSet<Person>> index = new HashMap<String, HashSet<Person>>();
public static void indexDB(String base)
{
    for(Person i: listB)
    {
        if(name.equals(base))
        {

        }
}

listB是一个包含Person元素的数组。

因此,如果Person的名称与String base匹配,则它们将附加到索引HashMap中的一对键值。每个键的HashSet包含其名称与String基础匹配的Persons。如何才能做到这一点?

另外,我有一个方法:

public void printPersons(String sth)
{

}

我想让它打印每次调用的密钥的HashSet中包含的人。

谢谢

3 个答案:

答案 0 :(得分:0)

这样做

HashMap<String, HashSet<Person>> index = new HashMap<String, HashSet<Person>>();
public static void indexDB(String base)
{
HashSet<Person> h = new HashSet<String>();
    for(Person i: listB)
    {
        //I assume it is i.name here
        if(i.name.equals(base))
        {
            h.add(i);
        }
    }
     index.put(base,h);
}

对于打印,请执行此操作

public void printPersons(String sth)
{
    Map mp = index.get(sth);
    Iterator it = mp.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
    }
}

答案 1 :(得分:0)

使用putIfAbsent插入空哈希集占位符。

然后将新人添加到现有集:

HashMap<String, HashSet<Person>> index = new HashMap<String, HashSet<Person>>();
public static void indexDB(String base)
{
    for(Person i: listB)
    {
        if(name.equals(base))
        {
            index.putIfAbsent(base, new HashSet<>());
            index.get(base).add(i)
        }
}

注意:为了正确添加要设置的人,您必须为equals()/hashCode()类实施Person,因为Set使用equals()来确定唯一性

答案 2 :(得分:0)

不是在每次迭代中创建HashSet对象,只有在名称匹配时才创建它,如下面的代码所示 -

@Service
public class Config {
    private static String mValue;

    private static String mAnotherValue;

    @Value("${my.value}")    
    public void setmValue(String mValue) {
    this.mValue = mValue;}

    @Value("${another.value}")
    public void setmAnotherValue(String mAnotherValue) {
    this.mAnotherValue = mAnotherValue;}

    //rest of your code...
}