Java Collectors toMap()方法在Java中的应用实例

Java Collectors toMap()方法在Java中的应用实例

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

toMap()方法有3个重载。

toMap(Function keyMapper, Function valueMapper)

语法。

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

其中

  • T : 输入元素的类型。
  • Map : 输出地图。
  • 接口收集器: 一个可变的还原操作,将输入元素累积到一个可变的结果容器中,在所有输入元素被处理后,可选择将累积的结果转化为最终表示。还原操作可以按顺序进行,也可以并行进行。
  • toMap() : 收集器类的静态方法,并返回一个收集器,该收集器将元素收集到一个Map中,其键和值是对输入元素应用映射函数的结果。采集器类在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<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 mergeFunction)

这是对 toMap() 方法的重载,其中在键和值中加入了一个额外的参数,那就是 合并函数。 该函数的任务是以编码者定义的方式合并具有相同键的值。这种重载方法只推荐在多个值有相同键的情况下使用。下面是一个简单的例子。

语法。

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

其中

  • T : 输入元素的类型。
  • Map : 输出地图。
  • 接口收集器: 一个可变的还原操作,将输入元素累积到一个可变的结果容器中,在所有输入元素被处理后,可选择将累积的结果转化为最终表示。还原操作可以按顺序进行,也可以并行进行。
  • toMap() : 收集器类的静态方法,并返回一个收集器,该收集器将元素收集到一个Map中,其键和值是对输入元素应用映射函数的结果。采集器类在java.util.streams包下。

参数。这个方法接受以下参数。

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

返回值。该方法返回一个收集器,该收集器将元素收集到一个Map中,其键是对输入元素应用键映射函数的结果,其值是对所有等于键的输入元素应用值映射函数的结果,并使用merge函数将它们结合起来。

下面的例子说明了上述方法。

// 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 mergeFunction, Supplier mapSupplier)

这是一个 toMap() 的重载方法,增加了一个参数,即供应商。我们需要在这里传递供应商。Supplier是java.util.Function类的接口。这是一个功能接口,因此可以作为lambda表达式或方法引用的赋值目标。如果我们想返回LinkedHashMap,我们需要将supplier传递为LinkedHashMap::new。在下面的例子中,我们也将这样做。

语法。

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

其中

  • T : 输入元素的类型。
  • Map : 输出地图。
  • 接口收集器: 一个可变的还原操作,将输入元素累积到一个可变的结果容器中,在所有输入元素被处理后,可选择将累积的结果转化为最终表示。还原操作可以按顺序进行,也可以并行进行。
  • toMap() : 收集器类的静态方法,并返回一个收集器,该收集器将元素收集到一个Map中,其键和值是对输入元素应用映射函数的结果。采集器类在java.util.streams包下。

参数。这个方法接受以下参数。

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

返回值。该方法返回一个收集器,该收集器将元素收集到一个Map中,其键是对输入元素应用键映射函数的结果,其值是对所有等于键的输入元素应用值映射函数的结果,并使用merge函数将它们组合起来

下面的例子说明了上述方法。

// 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}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

© 2025 极客教程   备案号:蜀ICP备11026280号-10


友情链接:极客笔记