Использование Pojo в качестве ключа в MAP не удалось найти ключ Java 8 - PullRequest
0 голосов
/ 25 апреля 2018

Пытается использовать POJO в Кей, но не может найти совпадение. Любая проблема с текущей методологией. Как я могу решить эту проблему?

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 голосов
/ 25 апреля 2018

Самая первая проблема заключается в том, что вам нужно реализовать hashCode и equals, добавив, таким образом, метод к вашему Model (классы в верхнем регистре):

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

Тогда findFirst возвращает Optional<Model>, а не Model. Поскольку containsKey из HashMap принимает Object в качестве параметра, это будет работать как вызов метода, но, очевидно, ничего не будет найдено.

Вы можете упростить это (и сделать его более читабельным) с помощью:

  Model m = list.stream()
            .filter(p -> p.name.equals("1"))
            .filter(p -> p.rollNo.equals(1))
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException("Key not found"));

  if (hm.containsKey(m)) {
        System.out.println("hit");
  }

Просто обратите внимание, что это создает исключение, если в вашем списке нет этого человека (вы можете делать и другие вещи здесь - до вас)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...