📜  Java中的收集器 toMap() 方法及示例

📅  最后修改于: 2022-05-13 01:55:08.710000             🧑  作者: Mango

Java中的收集器 toMap() 方法及示例

toMap()方法是Collectors类的静态方法,它返回一个收集器,该收集器将元素累积到一个 Map 中,其键和值是将提供的映射函数应用于输入元素的结果。请注意,键是唯一的,如果在任何情况下键重复,则在执行收集操作时会引发 IllegalStateException。

toMap() 方法有 3 个重载:

toMap(函数keyMapper,函数valueMapper)

句法:

public static  Collector
    toMap(Function keyMapper, Function valueMapper)

在哪里

  • T :输入元素的类型。
  • 地图:输出地图。
  • interface Collector:一种可变归约操作,将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。
  • toMap() :Collectors 类的静态方法,返回一个 Collector,它将元素收集到一个 Map 中,其键和值是对输入元素应用映射函数的结果。 Collectors 类位于Java.util.streams 包下。

参数:此方法接受以下参数:

  • keyMapper :生成键的映射函数
  • valueMapper : 产生值的映射函数

返回值:此方法返回一个收集器,它将元素收集到一个 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
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "G", "Geeks" } });
  
        // Convert the String to Map
        // using toMap() method
        Map
            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(函数keyMapper,函数valueMapper, BinaryOperator mergeFunction)

这是toMap()方法的重载,其中向键和值添加了一个额外的参数,即合并函数。该函数的任务是以编码器定义的方式合并具有相同键的值。仅在多个值具有相同键的情况下才建议使用此重载方法。下面给出一个简单的例子。

句法:

public static  Collector 
    toMap(Function keyMapper, 
          Function valueMapper, 
          BinaryOperator mergeFunction)

在哪里

  • T :输入元素的类型。
  • 地图:输出地图。
  • interface Collector:一种可变归约操作,将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。
  • toMap() :Collectors 类的静态方法,返回一个 Collector,它将元素收集到一个 Map 中,其键和值是对输入元素应用映射函数的结果。 Collectors 类位于Java.util.streams 包下。

参数:此方法接受以下参数:

  • keyMapper :生成键的映射函数
  • valueMapper : 产生值的映射函数
  • mergeFunction :一个合并函数,用于解决与同一键关联的值之间的冲突,如提供给 Map.merge(Object, Object, BiFunction)

返回值:此方法返回一个收集器,它将元素收集到一个 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
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "geeksforgeeks" } });
  
        // Get Map from String
        // using toMap() method
        Map
            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(函数keyMapper,函数valueMapper, BinaryOperator mergeFunction, 供应商 mapSupplier)

这是toMap()的一个重载方法,带有一个附加参数。即供应商。我们需要在这里通过供应商。供应商是Java.util 的接口。函数类。这是一个函数式接口,因此可以用作 lambda 表达式或方法引用的赋值目标。如果我们想返回 LinkedHashMap,我们需要将供应商作为 LinkedHashMap::new 传递。在下面的示例中,我们将执行相同的操作。

句法:

public static  Collector 
    toMap(Function keyMapper,
          Function valueMapper,
          BinaryOperator mergeFunction,
          Supplier mapSupplier)

在哪里

  • T :输入元素的类型。
  • 地图:输出地图。
  • interface Collector:一种可变归约操作,将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。
  • toMap() :Collectors 类的静态方法,返回一个 Collector,它将元素收集到一个 Map 中,其键和值是对输入元素应用映射函数的结果。 Collectors 类位于Java.util.streams 包下。

参数:此方法接受以下参数:

  • keyMapper :生成键的映射函数
  • valueMapper : 产生值的映射函数
  • mergeFunction :一个合并函数,用于解决与同一键关联的值之间的冲突,如提供给 Map.merge(Object, Object, BiFunction)
  • mapSupplier :返回一个新的空 Map 的函数,结果将插入其中

返回值:此方法返回一个收集器,它将元素收集到一个 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
            Ss1 = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "Geeks" } });
  
        // Get Map from String
        // using toMap() method
        LinkedHashMap
            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}