java stream 的tomap方法
在Java中,Stream接口的toMap方法是一个用于将流中的元素收集到Map中的终端操作。这个方法有两个重载版本,它们分别接受不同的参数。
1.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
2.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
第一个重载版本接受两个函数作为参数:
keyMapper:一个将流中的元素映射为Map中键的函数。
merge函数
valueMapper:一个将流中的元素映射为Map中值的函数。
这个版本的toMap方法会将流中的元素收集到一个新的Map中,其中每个元素的键和值由keyMapper和valueMapper函数确定。
第二个重载版本在第一个版本的基础上增加了一个额外的参数:
mergeFunction:一个用于合并键冲突的值的函数。当两个元素具有相同的键时,这个函数将被用来确定如何合并它们的值。
这个版本的toMap方法会将流中的元素收集到一个新的Map中,其中每个元素的键和值由keyMapper和valueMapper函数确定。如果两个元素具有相同的键,则使用mergeFunction函数来合并它们的值。
以下是一个使用toMap方法的示例:
java复制代码:
    List<String> names = Arrays.asList("John", "Jane", "David", "Alice");
   
    // 使用名字作为键,年龄作为值,创建一个Map
    Map<String, Integer> ageMap = names.stream()
    .Map(name -> name, name -> name.length()));
   
    System.out.println(ageMap); // 输出:{John=4, Jane=4, David=4, Alice=4}
在上面的示例中,我们使用名字作为键,名字的长度作为值,将一个字符串列表转换为一个Map。由于所有名字的长度都相同,因此最终的Map中没有键冲突,所以不需要使用mergeFunction。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。