我有一个lambda语句的一部分来自Map<'String,Double>我不太明白
.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作为keyvalue创建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());
它们实际上意味着什么?
答案 0 :(得分:3)
您提到的toMap
版本会使用keyMapper
函数,该函数用于提取地图键,因此使用Map.Entry::getKey
,valueMapper
函数提取映射值因此Map.Entry::getValue
,一个合并函数,用于解决碰撞,以防有两个相等的键,因此(String, Double) -> String
(基本上说"如果两个给定的键是相等的然后保留第一个的值并丢弃第二个"),最后将减少结果的LinkedHashMap::new
状态存储在LinkedHashMap
个实例中。
您提供的第二个示例代码段:
.collect(Collectors.groupingBy(String::toLowerCase,
TreeMap::new,
Collectors.counting());
说明流的元素将按字符串小写分组,缩减的结果将累积到TreeMap
,并且映射值将是流中每个字符串出现的计数。因此,生成的地图将为TreeMap<String, Long>
。
您提供的第三个示例代码段:
.collect(Collectors.groupingBy(entry -> entry.getKey().charAt(0),
TreeMap::new,
Collectors.toList());
说明流的元素将按条目键的第一个字符分组,缩减的结果将累积到TreeMap
,值是流的元素列表。因此,生成的地图是TreeMap<Character, List<T>>
,其中T
是流中元素的类型。
此外,您可以查看Collectors API并试用它和/或查看Guide to Java 8’s Collectors。