#java
Вопрос:
Я использую этот класс для управления некоторыми данными с помощью Java:
private static Set<Entry<String, String>> flatten(Map<String, List<String>> map) {
return map.entrySet().stream().flatMap(e ->
e.getValue().stream().map(v -> Map.entry(e.getKey(), v))
)
.collect(Collectors.toSet());
}
Однако, когда я пытаюсь скомпилировать eclipse/intellij, я получаю эту ошибку:
Cannot resolve method 'entry' in 'Map'
Как вы можете видеть в приведенном ниже коде, все работает нормально:
https://www.online-java.com/4LblEuqTN6
Мой код на eclipse выглядит следующим образом:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map.*;
import java.util.Set;
import java.util.stream.Collectors;
@RestController
@RequestMapping(value="test")
public class HelloController extends BaseExtController {
private static Set<Entry<String, String>> flatten(Map<String, List<String>> map) {
return map.entrySet().stream().flatMap(e ->
e.getValue().stream().map(v -> Map.entry(e.getKey(), v))
)
.collect(Collectors.toSet());
}
private static Map<String, List<String>> group(Set<Map.Entry<String, String>> entries) {
return entries.stream().collect(Collectors.groupingBy(
Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())
));
}
@RequestMapping (value="sync", method = RequestMethod.GET
, produces=MediaType.APPLICATION_JSON_VALUE)
public Map<String, List<String>> syncForms(
Model model,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map<String, List<String>> dictOP = new HashMap<String, List<String>>();
Map<String, List<String>> dictMobile = new HashMap<String, List<String>>();
List<String> obj1Mobile = new ArrayList<String>();
List<String> obj1Op = new ArrayList<String>();
obj1Mobile.add("Argentina");
obj1Op.add("Argentina");
dictOP.put("obj1", obj1Op);
dictMobile.put("obj1", obj1Mobile);
Set<Entry<String, String>> mobileEntries = flatten(dictMobile);
Set<Entry<String, String>> opEntries = flatten(dictOP);
Set<Entry<String, String>> add = new HashSet<>(opEntries);
add.removeAll(mobileEntries);
Set<Entry<String, String>> remove = new HashSet<>(mobileEntries);
remove.removeAll(opEntries);
return group(add);
}
Вы, ребята, знаете, почему это происходит ? Я определяю какой-то неправильный тип ?
Комментарии:
1.
Map
не имеетentry()
метода. Для чего предназначен этот код?2.
Map.entry()
был добавлен в Java 9, вы случайно не компилируете с помощью Java 8?3. Да, я использую Java 8.
4. Что ж, тогда этот метод будет вам недоступен. Либо обновите свою версию Java, либо предоставьте собственную реализацию
Map.Entry
, которую вы можете сопоставить (или используйте библиотеку, такую как коллекции Apache Commons, которая должна иметь готовую к использованию реализацию).5. Большое спасибо @Thomas