我需要设置一个本地groupCache和personCache。
我们的前任已将它们定义为:
private Map<List<String>, Integer> groupCache;
private Map<Person, Map<List<String>, Integer>> personCache;
所以在我宣布之后:
Map<List<String>,Integer> groupCache = new HashMap<List<String>,Integer>();
Map<List<String>, Map<List<String>,Integer> > personCache = new HashMap ....
我无法将数据映射到groupCache,更不用说构建personCache
了注意HashMap有两个“层”。在外层,Person是一个类。
所以我可能有一堆Person对象,例如person1,person2,person3 ......(人员数量不固定)。每个人都像是一个拥有5个0-组的领导者?每个组中的成员。
在内层,我最初将Group作为一个类。有五个小组,比如group1,group2 ......
为简单起见,我不使用Group作为类,而是使用String列表。所以List strList具有“A”,“B”,“C”,“D”,“E”。 (目前组的数量是固定的)
例如,我已经建立了:
List<String> strList = new ArrayList<String>(5);
strList.add("A");
strList.add("B");
strList.add("C");
strList.add("D");
strList.add("E");
对于每个组,我需要将组的大小显示为int。比如group1或“A”中有5个人,group2有3个人...
我有一个整数数组设置来计算成员数:
int[] intArr = { 5, 3, 2, 4, 4};
但我已将其转换为名为intList的列表:
List<Integer> intList = new ArrayList<Integer>();
for (int index = 0; index < intArr.length; index++)
{
intList.add(intArr[index]);
}
我尝试了几种方法,例如:
for (Integer number : intList)
for (String str : strList)
groupCache.put(str, intList);
但它不起作用。
有人可以帮助澄清如何
(1)。在我的例子中使用groupCache.put(...)创建groupCache然后perosnCache?
注意:成员数量一直在变化 - 在一个组中添加或减少一个新成员。
项目的另一部分已经有了一种更新表格的机制,以跟踪组中新成员的最新数量。
因此,每次有更新时,程序都会触发一个事件。我收到一个带有Person对象的事件并打开该人以查看他/她下的哪些组的成员数增加或减少。
所以我需要让HashMap在本地跟踪这些数字数组,并且需要尽可能频繁地更新我的数组列表。
(2)。我如何使用groupCache.get(...)来比较现有的成员数和新的成员数呢?
(3)。使用上面的增强型for循环缺少什么?
太多了!
[编辑]唉!经过一些挖掘,看起来我需要的是将初始设置更改为Map&gt; personCache
[编辑2] 我怎么意识到我可以这样定义它:
private List<Integer> groupCache;
groupCache = new ArrayList<Integer>();
private Map<Person, List<Integer>> personCache;
personCache = new HashMap<String, List<Integer>>();
现在我可以用这种方式设置group1,如果我必须手动完成:
groupCache.set(0, 5);
groupCache.set(0, 5);
我正在以这种方式为person1设置所有五个组,依此类推,
personCache.put(person1, groupCache);
所以我使用上面的设置将方法addPerson()放在一起没有问题。
问题:我是否从一个人中删除了一个人或一个团体?
我尝试过groupCache.clear()或.remove(...)。但不确定如何有条不紊地删除所有元素。
我需要设置removePerson()方法。
见下文:
public void removePerson(Person oldPerson) {
if (personCache == null)
personCache = new HashMap<Unit, List<Integer>>();
if (personCache.containsKey(oldPerson)) {
.....
}
groupCache.clear();
groupCache.remove(oldPerson);
}