3 回答
TA贡献1815条经验 获得超6个赞
我理解这种情况下的 forEach 方法需要一个具有以下签名的消费者功能接口
forEach()确实期望 aConsumer但要处理 aConsumer你不一定需要 a Consumer。您需要的是一种尊重功能接口的输入/输出的方法Consumer,即Entry<Integer,String>输入/void输出。
因此,您可以只调用一个方法,该方法的参数为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>>声明您传递给的a ,forEach()例如:
Consumer<Map.Entry<Integer,String>> consumer = this::useEntry;
//...used then :
testMap.entrySet().forEach(consumer);
仅当您的消费者forEach()被设计为以某种方式可变(由客户端计算/传递或无论如何)时才有意义。
如果您不是这种情况并且您使用了消费者,那么您最终会使事情变得比实际需要的更加抽象和复杂。
TA贡献1887条经验 获得超5个赞
关于什么
public void processMap(Map.Entry K){
System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());
System.out.println("Some more processing ....");
}
然后像这样使用它:
testMap.entrySet().forEach((K)-> processMap(K));
TA贡献1825条经验 获得超4个赞
您可以使用方法参考:
Consumer<Map.Entry<Integer,String>> processMap = SomeClass::someMethod;
该方法定义为:
public class SomeClass {
public static void someMethod (Map.Entry<Integer,String> entry) {
System.out.println("Key ="+entry.getKey()+" Value = "+entry.getValue());
System.out.println("Some more processing ....");
}
}
如果您愿意,您甚至可以使该方法更通用:
public static <K,V> void someMethod (Map.Entry<K,V> entry) {
System.out.println("Key ="+entry.getKey()+" Value = "+entry.getValue());
System.out.println("Some more processing ....");
}
添加回答
举报