Самая первая проблема заключается в том, что вам нужно реализовать 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");
}
Просто обратите внимание, что это создает исключение, если в вашем списке нет этого человека (вы можете делать и другие вещи здесь - до вас)