Mam List<String> w java i zawiera kilka ciągów.

Mam też hashmap za pomocą wartości String i chciałbym sprawdzić, czy na mojej liście jest każdy element, który nie znajduje się w Hashmap. To jest kod, który napisałem:

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

Ale nie działa prawidłowo. Czy możesz mi z tym pomóc?

7
randomuser1 20 luty 2019, 16:09

2 odpowiedzi

Najlepsza odpowiedź

Biorąc pod uwagę, że twój stan jest

Jeśli na mojej liście jest każdy element, który nie jest w Hashmap

Możesz użyć anyMatch podczas iteracji na liście elementów, aby sprawdzić, czy którykolwiek z nich nie jest obecny w wartościach Hashmap.

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

Lub spojrzeć na to, jakby wszystkie elementy someStrings są obecne w wartościach hashmapu

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

Podobny czek może być również używać containsAll na wartości Collection:

return myHashMap.values().containsAll(someStrings);
12
Naman 20 luty 2019, 18:28

Nie ma potrzeby strumieni, możesz po prostu użyć dobrego starego Collection#removeAll():

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

Teraz copy będzie zawierać wszystkie wartości nie są zawarte w myHashMap. Następnie możesz coś z nimi zrobić (jak iterating) lub po prostu zadzwonić Collection#isEmpty(), aby sprawdzić, czy wszystkie są zawarte na mapie

7
Lino 20 luty 2019, 13:30