我有一个ArrayList,它包含学生对象,如下所示:
List<Students> stdList = new ArrayList<Students>();
stdList.add(new Students(1,"std1","address1"));
stdList.add(new Students(2,"std2","address2"));
stdList.add(new Students(3,"std3","address3"));
stdList.add(new Students(4,"std4","address4"));
stdList.add(new Students(5,"std5","address5"));
stdList.add(new Students(6,"std6","address6"));
stdList.add(new Students(7,"std7","address7"));
stdList.add(new Students(8,"std8","address8"));
现在,我需要将stdList分成两组,其中包含相同数量的学生,在这种情况下说4,并将它们添加到我实现的hashMap:
int j=0;
HashMap<Integer,List<Students>> hm = new HashMap<>();
for (int i = 0; i < stdList.size(); i = i + 4)
{
j++;
hm.put(j,stdList.subList(i, i + 4));
}
哈希映射现在包含键值对:
{1=[1 std1 address1, 2 std2 address2, 3 std3 address3, 4 std4 address4], 2=[5 std5 address5, 6 std6 address6, 7 std7 address7, 8 std8 address8]}
现在我需要将一个值“3 std3 address3”从“key 1”移动到“key 2”,如:
{1=[1 std1 address1, 2 std2 address2, 4 std4 address4], 2=[5 std5 address5, 6 std6 address6, 7 std7 address7, 8 std8 address8,3 std3 address3]}
我怎样才能做到这一点?
答案 0 :(得分:1)
假设“someKey”是你要移除的关键,那么
key1.put(someKey, key2.remove(someKey));
答案 1 :(得分:0)
List<Student> ls = hm.get(1);
Student st = ls.get(3);
ls.remove(st); hm.get(2).add(st);
如果您可以通过索引访问列表,则无需搜索列表。
答案 2 :(得分:0)
解决方案是从HashMap获取学生列表并删除要移动的Student对象。然后从HashMap中获取另一个列表,只需添加对象。
我没有运行下面的代码,但它会是这样的
//Get the list for Key 1
List<Students> list = hm.get(Integer.valueOf(1));
//Remove the 3rd value, that would be your "3 std3 address3"
Students std = list.remove(2);
//Now get the list of Key 2
list = hm.get(Integer.valueOf(2));
//Add the value to that list
list.add(std);
答案 3 :(得分:0)
你可以这样做;
Student stud3=myMap.get(1).remove(myMap.get(1).get(2));
List<Student> secondList=myMap.get(2);
secondList.add(stud3);
myMap.put(2,secondList);
myMap是由你形成的地图。
答案 4 :(得分:0)
我想您知道如何搜索列表/地图中的元素,以及如何删除/添加它们。您已在代码中显示它。您的要求只是这些方法调用的另一种组合,它们对您来说不会有问题。
我猜测你不能进一步因为你有例外:
ConcurrentModificationException
因为我发现您使用了subList()
方法。它将返回支持列表的视图。您可以更改该列表中的元素,但任何结构修改都会抛出该异常。
如果这是您遇到的问题,简单的解决方案是在您调用subList
时创建新列表,例如new ArrayList(stdList.subList(i, i + 4))
,然后您可以进行结构修改。
如果这不是你的问题,请发表评论,我会删除答案。
PS你可能想稍微改变你的数据结构,我不知道你的确切要求,但目前的结构不太方便.....你可以查看番石榴多图...... < / p>