gpt4 book ai didi

java - 如何从 map 列表中删除特定对象?

转载 作者:行者123 更新时间:2023-11-29 05:43:25 26 4
gpt4 key购买 nike

我有一张看起来像这样的 map :HashMap<Person, List<Items>> .我想删除列表中的一些项目,我想删除的特定项目存储在另一个列表中。我怎样才能以最有效的方式删除 map 中与其他列表中的项目匹配的列表项?

最佳答案

这里有一个完整的例子来说明你的情况。请注意,hashcode 和 equals 是在 Item 类上实现的。这很重要,因为 removeAll 方法将使用它 equals 来确定提供的项目列表是否等于拥有的项目列表。

Item.java

public class Item {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Item(String name) {
super();
this.name = name;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Item other = (Item) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}


}

Person.java

public class Person {

private String name;


public Person(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

申请

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


public class StackTest {
public static void main(String[] args) {
Person person = new Person("Logan");
Person person2 = new Person("Jean");
Person person3 = new Person("Gambit");
Person person4 = new Person("Storm");

Item item1 = new Item("Claws");
Item item2 = new Item("Jacket");
Item item3 = new Item("Cards");
Item item4 = new Item("Cape");

List<Item> items = new ArrayList<Item>();
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);

List<Item> loganItems = new ArrayList<Item>(items);
List<Item> jeanItems = new ArrayList<Item>(items);
List<Item> gambitItems = new ArrayList<Item>(items);
List<Item> stormItems = new ArrayList<Item>(items);

Map<Person, List<Item>> people = new HashMap<Person,List<Item>>();
people.put(person, loganItems);
people.put(person2, jeanItems);
people.put(person3, gambitItems);
people.put(person4, stormItems);

printMap(people);

List<Item> removeItems = new ArrayList<Item>();
Item rItem1 = new Item("Cards");
Item rItem2 = new Item("Jacket");
removeItems.add(rItem1);
removeItems.add(rItem2);

removeItem(people, person, removeItems);

printMap(people);

}

public static void removeItem(Map<Person,List<Item>> map, Person p, List<Item> items){
map.get(p).removeAll(items);
}

public static void printMap(Map<Person, List<Item>> map){
for(Entry<Person,List<Item>> entry:map.entrySet()){
System.out.println(entry.getKey().getName() + " items:");
for(Item item: entry.getValue()){
System.out.println(item.getName());
}
}
}
}

关于java - 如何从 map 列表中删除特定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com