Java 8 Lambda, фильтр HashMap, не может разрешить метод
Я новичок в новых функциях Java 8. Я изучаю, как фильтровать карту по элементам. Я рассмотрел этот учебник и этот пост для моей проблемы, но я не может решить.
@Test
public void testSomething() throws Exception {
HashMap<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map = map.entrySet()
.parallelStream()
.filter(e -> e.getValue()>1)
.collect(Collectors.toMap(e->e.getKey(), e->e.getValue()));
}
Однако, моя IDE (IntelliJ) говорит: "Невозможно разрешить метод getKey()", что не может усложнить:
![enter image description here]()
Также это не помогает:
![enter image description here]()
Может ли кто-нибудь помочь мне решить эту проблему?
Благодарю.
Ответы
Ответ 1
Сообщение вводит в заблуждение, но ваш код не компилируется по другой причине: collect
возвращает Map<String, Integer>
не a HashMap
.
Если вы используете
Map<String, Integer> map = new HashMap<>();
он должен работать как ожидалось (также убедитесь, что у вас есть все соответствующие импорты).
Ответ 2
Вы возвращаете Map not hashMap, поэтому вам нужно изменить тип map
на java.util.Map
. Кроме того, вы можете использовать ссылку на метод, а не вызов getKey, getValue. Например.
Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Вы можете решить эту проблему, используя некоторую полезную помощь, например. если вы нажмете ctrl+alt+v
перед
new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Переменная, созданная intellij, будет точного типа, и вы получите.
Map<String, Integer> collect = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));