Я могу ошибаться, но, как я понял, вы хотите проверить следующее условие:
- Ключи HashMap должны принадлежать следующему списку ключевых слов
{"id", "name", "lastname"}
. - Никакое значение из HashMap не должно быть равно нулю.
Вы можете использовать что-то похожее на это:
map.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null)
Таким образом, мы перебираем набор записей и проверяем, принадлежит ли ключ записи определенному набору, и если значение не равно нулю.Вот более подробный пример:
Set<String> keys = Set.of("id", "name", "lastname");
Map<String,List<Integer>> map = Map.of("id", List.of(1,2,3), "name", List.of(4,5,6));
map.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null);
Map<String,List<Integer>> map1 = Map.of("id", List.of(1,2,3), "not in the keys", List.of(4,5,6));
map1.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null);
Обратите внимание, что я использую фабричные методы коллекций для создания Map
, List
и Set
, который был добавлен в java-9, но в потоковом APIдоступен с версии Java-8.
Что касается вашего кода, вы всегда получите true
, потому что, как только существует entrySet, который удовлетворяет условию, метод вернет результат.
for (int i = 0; i < keys.length; i++) {
if (pair.getKey().equals(keys[i])) {
return true; // one single match found return true.
}
}
Вы можете попытаться отменить условие и вернуть false, как только возникнет несоответствие.
for (int i = 0; i < keys.length; i++) {
if (!pair.getKey().equals(keys[i]) || pair.getValue() == null) {
return false; // mismatch found, doesn't need to verify
// remaining pairs.
}
}
return true; // all pairs satisfy the condition.
Надеюсь, вы найдете это полезным.