尝试在Key中使用POJO但无法找到匹配当前methodolgy的任何问题 我该如何解决这个问题?
public class test {
public static void main(String a[]){`enter code here`
HashMap<model, String> hm = new HashMap<model, String>();
//add key-value pair to hashmap
List<model> lm=new ArrayList<>();
lm.add(new model(1,"1"));
lm.add(new model(2,"2"));
hm.put(lm.get(0), "1");
System.out.println("Start");
if (hm.containsKey(lm.stream().filter(person->person.name.equals("1")
&&
person.rollNo.equals(1)).findFirst())) {
System.out.println("hit");
}
}
static class model{
private Integer rollNo;
private String name;
@Override
public boolean equals(Object obj) {
model modeltemp= (model)obj;
if (modeltemp.name.equals(name)&& modeltemp.rollNo.equals(rollNo)) {
return true;
}
return super.equals(obj);
}
public Integer getRollNo() {
return rollNo;
}
public void setRollNo(Integer rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public model(Integer rollNo, String name) {
super();
this.rollNo = rollNo;
this.name = name;
}
}
}
答案 0 :(得分:3)
第一个问题是你需要实现hashCode
和 equals
,从而为你的Model
添加一个方法(类是大写的):< / p>
@Override
public int hashCode() {
return Objects.hash(getRollNo(), getName());
}
然后findFirst
会返回Optional<Model>
,而不是Model
。由于来自containsKey
的{{1}}接受HashMap
作为参数,因此这将作为方法调用,但显然不会找到任何内容。
您可以通过以下方式简化(并使其更具可读性):
Object
请注意,如果您的列表中不包含此人,则会抛出异常(您可以在此处执行其他操作 - 由您决定)