从 hashmap 中的数组列表中删除一个值
Remove a value from a arraylist who is in a hashmap
我有一个哈希图,它包含一个数组列表作为值。我想检查其中一个数组列表是否包含一个对象,然后从数组列表中删除该对象。但是,怎么办?
我试过使用一些 for 循环,但是我得到了一个 ConcurrentModificationException,而且我无法摆脱这个异常。
我的哈希图:
HashMap<String,ArrayList<UUID>> inareamap = new HashMap<String, ArrayList<UUID>>();
我想检查 ArrayList 是否包含我得到的 UUID,如果是,我想将它从 ArrayList 中删除。但是我不知道代码那个位置的字符串。
我已经尝试过的:
for (ArrayList<UUID> uuidlist : inareamap.values()) {
for (UUID uuid : uuidlist) {
if (uuid.equals(e.getPlayer().getUniqueId())) {
for (String row : inareamap.keySet()) {
if (inareamap.get(row).equals(uuidlist)) {
inareamap.get(row).remove(uuid);
}
}
}
}
}
尝试使用迭代器。
inareamap.iterator().. 和.. iterator.remove()
有一种更优雅的方法,使用 Java 8:
Map<String, ArrayList<UUID>> map = ...
UUID testId = ...
// defined elsewhere
// iterate through the set of elements in the map, produce a string and list for each
map.forEach((string, list) -> {
// as the name suggests, removes if the UUID equals the test UUID
list.removeIf(uuid -> uuid.equals(testId));
});
如果你有Java8个,camaron1024的解决方案最好。否则你可以利用你有一个列表并按索引向后遍历它的事实。
for(ArrayList<UUID> uuidlist : inareamap.values()) {
for(int i=uuidlist.size()-1;i>=0;i--) {
if (uuidlist.get(i).equals(e.getPlayer().getUniqueId()))
uuidlist.remove(i);
}
}
这是简单的解决方案。
UUID key = ... ;
for(Map.Entry<String,ArrayList<UUID>> e : hm.entrySet()){
Iterator<UUID> itr = e.getValue().iterator();
while(itr.hasNext()){
if(itr.next() == key)
itr.remove();
}
}
我有一个哈希图,它包含一个数组列表作为值。我想检查其中一个数组列表是否包含一个对象,然后从数组列表中删除该对象。但是,怎么办?
我试过使用一些 for 循环,但是我得到了一个 ConcurrentModificationException,而且我无法摆脱这个异常。
我的哈希图:
HashMap<String,ArrayList<UUID>> inareamap = new HashMap<String, ArrayList<UUID>>();
我想检查 ArrayList 是否包含我得到的 UUID,如果是,我想将它从 ArrayList 中删除。但是我不知道代码那个位置的字符串。
我已经尝试过的:
for (ArrayList<UUID> uuidlist : inareamap.values()) {
for (UUID uuid : uuidlist) {
if (uuid.equals(e.getPlayer().getUniqueId())) {
for (String row : inareamap.keySet()) {
if (inareamap.get(row).equals(uuidlist)) {
inareamap.get(row).remove(uuid);
}
}
}
}
}
尝试使用迭代器。 inareamap.iterator().. 和.. iterator.remove()
有一种更优雅的方法,使用 Java 8:
Map<String, ArrayList<UUID>> map = ...
UUID testId = ...
// defined elsewhere
// iterate through the set of elements in the map, produce a string and list for each
map.forEach((string, list) -> {
// as the name suggests, removes if the UUID equals the test UUID
list.removeIf(uuid -> uuid.equals(testId));
});
如果你有Java8个,camaron1024的解决方案最好。否则你可以利用你有一个列表并按索引向后遍历它的事实。
for(ArrayList<UUID> uuidlist : inareamap.values()) {
for(int i=uuidlist.size()-1;i>=0;i--) {
if (uuidlist.get(i).equals(e.getPlayer().getUniqueId()))
uuidlist.remove(i);
}
}
这是简单的解决方案。
UUID key = ... ;
for(Map.Entry<String,ArrayList<UUID>> e : hm.entrySet()){
Iterator<UUID> itr = e.getValue().iterator();
while(itr.hasNext()){
if(itr.next() == key)
itr.remove();
}
}