Я понимаю, что метод forEach в этом случае ожидает, что Consumer Functional Interface` имеет сигнатуру ниже
forEach()
ожидает действительно Consumer
, но для обработки Consumer
выне нужно обязательно Consumer
.Вам нужен метод, который учитывает ввод / вывод функционального интерфейса Consumer
, то есть Entry<Integer,String>
input / void
output.
Таким образом, вы можете просто вызвать метод с параметром Entry
:
testMap.entrySet().forEach(k-> useEntry(k)));
или
testMap.entrySet().forEach(this::useEntry));
с помощью useEntry (), например:
private void useEntry(Map.Entry<Integer,String> e)){
System.out.println("Key ="+e.getKey()+" Value = "+e.getValue());
System.out.println("Some more processing ....");
}
Объявление Consumer<Map.Entry<Integer,String>>
, которое вы передаете forEach()
, такое как:
Consumer<Map.Entry<Integer,String>> consumer = this::useEntry;
//...used then :
testMap.entrySet().forEach(consumer);
имеет смысл, только если потребитель в вашем forEach()
предназначен для вариабельности в некоторомпуть (вычисляется / передается клиентом или в любом случае).
Если вы не в этом случае и используете Consumer, вы, наконец, сделали вещи более абстрактными и сложными, чем это фактически требуется.