一般來說,這是如何通過它的值進行過濾的地圖:
static <K, V> Map<K, V> filterByValue(Map<K, V> map, Predicate<V> predicate) {
return map.entrySet()
.stream()
.filter(entry -> predicate.test(entry.getValue()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
}
呼叫它是這樣的:
Map<String, Integer> originalMap = new HashMap<>();
originalMap.put("One", 1);
originalMap.put("Two", 2);
originalMap.put("Three", 3);
Map<String, Integer> filteredMap = filterByValue(originalMap, value -> value == 2);
Map<String, Integer> expectedMap = new HashMap<>();
expectedMap.put("Two", 2);
assertEquals(expectedMap, filteredMap);
我不知道我的解決方案,它不工作時,我想收集它映射「e」是不t地圖它只是一個對象 – Nazila
@nazila'e'是一個'Map.Entry>'。我在'collect'的調用中做了一些愚蠢的語法錯誤。見編輯的答案。 –
Eran
您不需要使用'filter()',只需將謂詞作爲參數傳遞給'anyMatch()'。 –