簡體   English   中英

如何使用java8中的方法引用打印多個參數

[英]How to print multiple parameters using Method reference in java8

我正在嘗試使用 twoin java 打印出基本的hashmap

Map<Integer, String> mp = new HashMap<Integer, String>();
mp.put(10, "apple");
mp.put(20, "orange");
mp.put(30, "banana");

但是當涉及到java8中的method reference時,我無法弄清楚如何打印多個參數。

我試過這樣的事情。 但它給了我編譯錯誤。

mp.forEach(System.out::println(i+" "+s););

請幫我弄清楚這一點。 謝謝你。

可能與其他答案相矛盾,但我真的認為您不需要在這里使用方法參考。 恕我直言,

mp.forEach((i, s) -> System.out.println(i + " " + s));

對於這種用例,遠遠優於方法參考。

你不能。 該語言不允許這樣做,那里沒有隱式 i 和 s 可以通過這種方式傳遞給方法引用。 你能做什么,不知道為什么,但你可以:

private static <K, V> void consumeBoth(K k, V v) {
     //Log how u want this
}

並將其用於:

map.forEach(Yourclass::consumeBoth)

但這可以用 lambda 表達式就地完成,我真的看不出這個小例子有什么好處

您可以編寫一個單獨的方法,例如:

public static <K, V> void printEntry(Map.Entry<K, V> e) {
    System.out.println(e.getKey() + " " + e.getValue());
}

map.entrySet().forEach(Demo::printEntry);

或者,如果Map.Entry<K, V>.toString()滿足您的要求:

map.entrySet().forEach(System.out::println);

// 20=orange
// 10=apple
// 30=banana

編輯:此外,按照@Holger 的建議,您可以安全地省略類型參數,只要方法內的代碼不依賴於它們:

public static void printEntry(Object k, Object v) {
    System.out.println(k + " " + v);
}

map.forEach(Demo::printEntry);

不能使用方法引用System.out::println指定空格。
傳遞給System.out::println的參數由Map.forEach(BiConsumer)BiConsumer參數推斷。

但是您可以使用map()格式化預期的String ,這樣, System.out::println推斷的參數將是格式化的字符串,您需要:

mp.entrySet()
  .stream()
  .map(e-> e.getKey() + " " + e.getValue())
  .forEach(System.out::println);

您還可以使用 entrySet 打印

 mp.entrySet().forEach(e->System.out.println(e.getKey()+"="+e.getValue()));

我終於找到了一個解決方案,但是在 Java 8 中使用了 Apache API Pair 類(ImmutablePair)。

Stream.of(ImmutablePair.of("A", "1"), ImmutablePair.of("B", "0")) .collect(Collectors.toMap(Pair::getLeft, Pair::getRight));

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM