gpt4 book ai didi

java - 需要帮助理解集合在 lambda 语句中的使用

转载 作者:行者123 更新时间:2023-11-29 04:18:25 24 4
gpt4 key购买 nike

我有一部分来自 Map <'String, Double> 的 lambda 语句我不太明白。

.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (String, Double) -> String,
LinkedHashMap::new);

这是我认为的意思:

Map.Entry::getKey is stating variable String,
Map.Entry::getValue is stating variable Double

不太明白什么是(String, Double) -> String, LinkedHashMap::new。它是否创建了一个以 String 为键值的 LinkedHashMap?但是为什么需要 Double in (String, Double)?

另一个例子是 map 的一部分

.collect(Collectors.groupingBy(String::toLowerCase, TreeMap::new, Collectors.counting());

then followed by...

.collect(Collectors.groupingBy(entry ->
entry.getKey().charAt(0), TreeMap::new, Collectors.toList());

它们到底是什么意思?

最佳答案

toMap您提到的版本使用 keyMapper用于提取映射键的函数因此是Map.Entry::getKey , 一个 valueMapper用于提取 map 值的函数因此是Map.Entry::getValue ,一个合并函数,用于在有两个键相等的情况下解决冲突,因此 (String, Double) -> String (基本上是说“如果两个给定的键相等,则保留第一个的值并丢弃第二个”)最后是 LinkedHashMap::new指出减少的结果应存储在 LinkedHashMap 中实例。

您提供的第二个示例片段:

.collect(Collectors.groupingBy(String::toLowerCase,
TreeMap::new,
Collectors.counting());

声明流的元素将按小写的字符串分组,归约的结果将累积到一个TreeMap中。并且映射值将是流中每个字符串出现的计数。因此,生成的 map 将是 TreeMap<String, Long> .

您提供的第三个示例片段:

.collect(Collectors.groupingBy(entry -> entry.getKey().charAt(0), 
TreeMap::new,
Collectors.toList());

声明流中的元素将按输入键的第一个字符分组,归约的结果将累积到一个TreeMap中。 values 是流元素的列表。因此,生成的 map 是 TreeMap<Character, List<T>>其中 T是流中元素的类型。


此外,您可以查看 Collectors API并对其进行试验和/或查看 Guide to Java 8’s Collectors .

关于java - 需要帮助理解集合在 lambda 语句中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com