在MAP中使用Pojo作为密钥无法找到密钥Java 8

时间:2018-04-25 11:25:42

标签: java collections java-8 hashmap java-stream

尝试在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;
    }

}
}

1 个答案:

答案 0 :(得分:3)

第一个问题是你需要实现hashCode equals,从而为你的Model添加一个方法(类是大写的):< / p>

@Override
public int hashCode() {
    return Objects.hash(getRollNo(), getName());
}

然后findFirst会返回Optional<Model>,而不是Model。由于来自containsKey的{​​{1}}接受HashMap作为参数,因此这将作为方法调用,但显然不会找到任何内容。

您可以通过以下方式简化(并使其更具可读性):

Object

请注意,如果您的列表中不包含此人,则会抛出异常(您可以在此处执行其他操作 - 由您决定)