Dil*_*Dil 6 java lambda hashmap java-8 method-reference
我正试图hashmap用两个java 打印出基本的.
Map<Integer, String> mp = new HashMap<Integer, String>();
mp.put(10, "apple");
mp.put(20, "orange");
mp.put(30, "banana");
Run Code Online (Sandbox Code Playgroud)
但是当谈到method referencejava8 时,我无法弄清楚如何打印多个参数.
我试过这样的事.但它给了我编译错误.
mp.forEach(System.out::println(i+" "+s););
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.
谢谢.
可能与其他答案相矛盾,但我真的不认为你需要在这里使用方法参考.恕我直言,
mp.forEach((i, s) -> System.out.println(i + " " + s));
Run Code Online (Sandbox Code Playgroud)
对于这样的用例,它远比方法参考好.
您可以编写一个单独的方法,例如:
public static <K, V> void printEntry(Map.Entry<K, V> e) {
System.out.println(e.getKey() + " " + e.getValue());
}
map.entrySet().forEach(Demo::printEntry);
Run Code Online (Sandbox Code Playgroud)
或者,如果Map.Entry<K, V>.toString()满足您的要求:
map.entrySet().forEach(System.out::println);
// 20=orange
// 10=apple
// 30=banana
Run Code Online (Sandbox Code Playgroud)
编辑:此外,按照@Holger的建议,只要方法中的代码不依赖于它们,就可以安全地省略类型参数:
public static void printEntry(Object k, Object v) {
System.out.println(k + " " + v);
}
map.forEach(Demo::printEntry);
Run Code Online (Sandbox Code Playgroud)
你不能.语言不允许这样,没有隐含的i和s可以通过那种方式传递给方法引用.你可以做什么,不知道为什么,但你可以:
private static <K, V> void consumeBoth(K k, V v) {
//Log how u want this
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
map.forEach(Yourclass::consumeBoth)
Run Code Online (Sandbox Code Playgroud)
但这可以用lambda表达式完成,我真的觉得这个小例子没什么好处
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |