Как я могу проверить, есть ли в моем массиве элемент, которого нет в hashmap? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть List<String> в java, и он содержит несколько строк.

У меня также есть hashmap со значениями String, и я хотел бы проверить, есть ли какой-либо элемент в моем спискеэто не в Hashmap.Это код, который я написал:

List<String> someStrings = fetchData();
if (someStrings.stream().noneMatch(s -> myHashMap.containsValue(s))) {
    return false;
} 
return true;

Но он не работает должным образом.Вы можете помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Нет необходимости в потоках, вы можете просто использовать старый добрый Collection#removeAll():

Set<String> copy = new HashSet<>(someStrings);
copy.removeAll(myHashMap.values());

Теперь copy будет содержать все значения, не содержащиеся в myHashMap.Затем вы можете что-то с ними сделать (например, итерацию) или просто позвонить Collection#isEmpty(), чтобы проверить, все ли содержится на карте

0 голосов
/ 20 февраля 2019

Учитывая, что ваше условие

, если в моем Списке есть какой-либо элемент, которого нет в Hashmap

, вы можете использовать anyMatch при переборе списка.элементов, чтобы проверить, присутствует ли какой-либо из них в значениях hashmap.

return someStrings.stream().anyMatch(val -> !myHashMap.containsValue(val))

Или посмотреть на это, как если бы все элементы someStrings присутствовали взначения хэш-карты

return someStrings.stream().allMatch(myHashMap::containsValue);

Аналогичная проверка может также использовать containsAll вместо Collection значений:

return myHashMap.values().containsAll(someStrings);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...