Хотя partitioningBy
- это путь, когда вам нужны обе альтернативы в качестве выходных данных, основанных на условии.Еще один выход (полезный для создания карты на основе одного условия) - использовать Collectors.filtering
как:
Map<String, String> myMap = Map.of("d", "D","c", "C","b", "B","A", "A");
List<String> myList = List.of("a", "b", "c");
Predicate<String> condition = myList::contains;
Map<String, String> keysPresentInList = myMap.keySet()
.stream()
.collect(Collectors.filtering(condition,
Collectors.toMap(Function.identity(), myMap::get)));
Map<String, String> keysNotPresentInList = myMap.keySet()
.stream()
.collect(Collectors.filtering(Predicate.not(condition),
Collectors.toMap(Function.identity(), myMap::get)));
или, в качестве альтернативы, если вы могли бы обновить существующую карту на месте, то вы могли бысохранить записи на основе присутствия их ключа в списке, используя только одну строку:
myMap.keySet().retainAll(myList);