gpt4 book ai didi

java - 如何根据对象属性知道 map 是否包含该对象

转载 作者:行者123 更新时间:2023-11-30 06:22:51 27 4
gpt4 key购买 nike

我正在使用 map ,并希望将值对象用作 map 键……并将列表用作值。值对象有 2 个属性,名字,名字。如果两个属性都与同一映射中的某个键匹配,我想将 map.containsKey() 返回为真。

我尝试如下使用比较器

public class comaparatorEx  implements Comparator<Test>{
public static void main(String args[]){

Map m= new HashMap<Test,List<String>>();
Test t = new Test();
t.setFirstname("vamsi");
t.setSecondname("priya");

List descriptionList=new ArrayList();
descriptionList.add("description1");
m.put(t, descriptionList);
Test t2 = new Test();
t2.setFirstname("vamsi");
t2.setSecondname("priya");

if(m.containsKey(t2)){
System.out.println("user found");
}
}

public int compare(Test o1, Test o2) {
if((o1.firstname.equals(o2.firstname) )&& o1.secondname.equals(o2.secondname))
return 0;
else return 1;
}
}

这是我正在使用的值对象

public class  Test  {

String firstname;
String secondname;

public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getSecondname() {
return secondname;
}
public void setSecondname(String secondname) {
this.secondname = secondname;
}

}

但它为我返回 false..请帮助我..提前致谢

最佳答案

对于HashMap,您需要在类中覆盖equalshashCode

可能的实现:

class Test
{
...
@Override
public int hashCode()
{
return 31*firstname.hashCode() + secondname.hashCode();
}

@Override
public boolean equals(Object obj)
{
// basic type validation
if (!(obj instanceof Test))
return false;

Test t = (Test)obj;
return firstname.equals(t.firstname) && secondname.equals(t.secondname);
}
}

Comparator 用于基于比较的集合,例如 TreeMap。要使用它,请在构造函数中提供此类的实例:

Map m = new TreeMap<Test,List<String>>(new comaparatorEx());

但是您的 compare 函数存在问题 - 元素之间需要有逻辑顺序(没有,因为您永远不会返回 -1)。 String 有一个 compareTo,你可以直接使用它:

public int compare(Test o1, Test o2) {
int result = o1.firstname.compareTo(o2.firstname);
if (result == 0)
return o1.secondname.compareTo(o2.secondname));
else
return result;
}

关于java - 如何根据对象属性知道 map 是否包含该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864819/

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