當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Collectors toMap()用法及代碼示例


toMap()方法是Collector類的靜態方法,該方法返回一個Collector,該Collector將元素累積到Map中,該Map的鍵和值是將提供的映射函數應用於輸入元素的結果。請注意,鍵是唯一的,並且如果在任何情況下鍵都是重複的,則在執行收集操作時會拋出IllegalStateException。

toMap()方法有3個重載:

toMap(Function keyMapper, Function valueMapper)

用法:


public static  Collector<T, ?, Map>
    toMap(Function keyMapper, Function valueMapper)

哪裏

  • T:輸入元素的類型
  • Map:輸出圖
  • 接口Collector:可變歸約運算,將輸入元素累積到可變結果容器中,在處理完所有輸入元素之後,可選地將累積結果轉換成最終表示形式。還原操作可以順序或並行執行。
  • toMap():Collector類的靜態方法,並返回一個Collector,該Collector將元素收集到Map中,其鍵和值是將映射函數應用於輸入元素的結果。 Collectors類位於java.util.streams包下。

參數:此方法接受以下參數:

  • keyMapper:產生鍵的映射函數
  • valueMapper:產生值的映射函數

返回值:此方法返回一個Collector,該Collector將元素收集到Map中,其鍵和值是將映射函數應用於輸入元素的結果

下麵的示例說明了上述方法:

// Java program to demonstrate 
// toMap() method with unique keys 
  
import java.util.stream.Collectors; 
import java.util.stream.Stream; 
import java.util.*; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
  
        // Create a String with no repeated keys 
        Stream<String[]> 
            str = Stream 
                      .of(new String[][] { { "GFG", "GeeksForGeeks" }, 
                                           { "g", "geeks" }, 
                                           { "G", "Geeks" } }); 
  
        // Convert the String to Map 
        // using toMap() method 
        Map<String, String> 
            map = str.collect( 
                Collectors.toMap(p -> p[0], p -> p[1])); 
  
        // Print the returned Map 
        System.out.println("Map:" + map); 
    } 
}
輸出:
Map:{G=Geeks, g=geeks, GFG=GeeksForGeeks}

toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction)

這是toMap()方法的重載,其中向鍵和值添加了一個額外的參數,這就是合並函數。該函數的任務是以編碼器定義的方式合並具有相同鍵的值。僅當存在多個值的相同鍵時,才建議使用此重載方法。一個簡單的例子如下。

用法:

public static  Collector<T, ?, Map> 
    toMap(Function keyMapper, 
          Function valueMapper, 
          BinaryOperator<U> mergeFunction)

哪裏

  • T:輸入元素的類型
  • Map:輸出圖
  • 接口Collector:可變歸約運算,將輸入元素累積到可變結果容器中,在處理完所有輸入元素之後,可選地將累積結果轉換成最終表示形式。還原操作可以順序或並行執行。
  • toMap():Collector類的靜態方法,並返回一個Collector,該Collector將元素收集到Map中,其鍵和值是將映射函數應用於輸入元素的結果。 Collectors類位於java.util.streams包下。

參數:此方法接受以下參數:

  • keyMapper:產生鍵的映射函數
  • valueMapper:產生值的映射函數
  • mergeFunction:一個合並函數,用於解決與相同鍵關聯的值之間的衝突,如提供給Map.merge(Object,Object,BiFunction)

返回值:此方法返回一個Collector,該Collector將元素收集到Map中,其鍵是對輸入元素應用鍵映射函數的結果,其值是對等於該鍵的所有輸入元素應用值映射函數並將其組合的結果使用合並函數


下麵的示例說明了上述方法:

// Java program to demonstrate 
// toMap() method without unique keys 
  
import java.util.stream.Collectors; 
import java.util.stream.Stream; 
import java.util.*; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
  
        // Create a String with repeated keys 
        Stream<String[]> 
            str = Stream 
                      .of(new String[][] { { "GFG", "GeeksForGeeks" }, 
                                           { "g", "geeks" }, 
                                           { "GFG", "geeksforgeeks" } }); 
  
        // Get Map from String 
        // using toMap() method 
        Map<String, String> 
            map = str 
                      .collect(Collectors 
                                   .toMap(p -> p[0], p -> p[1], (s, a) -> s + ", " + a)); 
  
        // Print the Map 
        System.out.println("Map:" + map); 
    } 
}
輸出:
Map:{g=geeks, GFG=GeeksForGeeks, geeksforgeeks}

toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction, Supplier mapSupplier)

這是toMap()的重載方法,帶有附加參數.i供應商。我們需要在這裏通過供應商。 Supplier是java.util.Function類的接口。這是一個函數接口,因此可以用作lambda表達式或方法引用的分配目標。如果要返回LinkedHashMap,則需要將供應商作為LinkedHashMap::new傳遞。在下麵的示例中,我們將做同樣的事情。

用法:

public static <T, K, U, M extends Map> Collector 
    toMap(Function keyMapper,
          Function valueMapper,
          BinaryOperator<U> mergeFunction,
          Supplier mapSupplier)

哪裏

  • T:輸入元素的類型
  • Map:輸出圖
  • 接口Collector:可變歸約運算,將輸入元素累積到可變結果容器中,在處理完所有輸入元素之後,可選地將累積結果轉換成最終表示形式。還原操作可以順序或並行執行。
  • toMap():Collector類的靜態方法,並返回一個Collector,該Collector將元素收集到Map中,其鍵和值是將映射函數應用於輸入元素的結果。 Collectors類位於java.util.streams包下。

參數:此方法接受以下參數:

  • keyMapper:產生鍵的映射函數
  • valueMapper:產生值的映射函數
  • mergeFunction:一個合並函數,用於解決與相同鍵關聯的值之間的衝突,如提供給Map.merge(Object,Object,BiFunction)
  • mapSupplier :一個函數,該函數返回一個新的空Map,將結果插入其中

返回值:此方法返回一個Collector,該Collector將元素收集到Map中,其鍵是對輸入元素應用鍵映射函數的結果,其值是對等於該鍵的所有輸入元素應用值映射函數並將其組合的結果使用合並函數

下麵的示例說明了上述方法:

// Java program to demonstrate 
// toMap() method 
  
import java.util.stream.Collectors; 
import java.util.stream.Stream; 
import java.util.*; 
  
public class GFG { 
  
    public static void main(String[] args) 
    { 
  
        // Create a String to be converted 
        Stream<String[]> 
            Ss1 = Stream 
                      .of(new String[][] { { "GFG", "GeeksForGeeks" }, 
                                           { "g", "geeks" }, 
                                           { "GFG", "Geeks" } }); 
  
        // Get Map from String 
        // using toMap() method 
        LinkedHashMap<String, String> 
            map2 = Ss1 
                       .collect(Collectors 
                                    .toMap( 
                                        p -> p[0], p -> p[1], (s, a) -> s + ", " + a, LinkedHashMap::new)); 
  
        // Print the Map 
        System.out.println("Map:" + map2); 
    } 
}
輸出:
Map:{GFG=GeeksForGeeks, Geeks, g=geeks}


相關用法


注:本文由純淨天空篩選整理自piyush25pv大神的英文原創作品 Collectors toMap() method in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。