【发布时间】:2019-07-02 06:49:03
【问题描述】:
考虑以下通过将每个字符串映射到其长度并打印每个映射条目来处理字符串列表的示例代码
package com.dbenergie.ndm.bnb.business;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Application {
public static void main(String[] args) {
final List<String> strings = Arrays.asList("Hello", "World", "!");
// 1
final Map<String, Integer> stringCharacterCountMapping = strings.stream()
.collect(Collectors.toMap(Function.identity(), String::length));
stringCharacterCountMapping.entrySet().stream().forEach(System.out::println);
}
}
现在,我个人觉得相当混乱或样板式的是使用Function.identity()(1)将每个流条目显式映射为映射的键,但到目前为止我发现的每个映射收集器都需要一个键映射器 -是否有一些我忽略的收集器,或者如果我需要这个,我是否必须定义我自己的收集器?有类似的东西会很方便
Collectors.toMap(String::length);
或类似的。有什么想法吗?
【问题讨论】:
-
toMap没有定义键映射,是这个意思吗? -
toMap隐式使用流元素作为键。 -
如果在文档中看到 (docs.oracle.com/javase/8/docs/api/java/util/stream/…) ,实际上有 3 个 Collectors.toMap 方法,每个方法都以 keyMapper 作为参数。所以没有它是不可能的。
标签: java java-stream