当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。