我有以下代码:
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中包含的人。
谢谢
答案 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...
}