Java 为什么这个Collectors.toMap有问题
我正在尝试将Java 为什么这个Collectors.toMap有问题,java,lambda,java-stream,Java,Lambda,Java Stream,我正在尝试将集合转换为映射。但是我不确定为什么keyMapper和valueMapper不会获取关键功能对象 private static void populateHeader(Map<String, List<String>> headerMap, Set<String> keys) { headerMap= keys.stream() .collect(Collectors.toMap(
集合
转换为映射
。但是我不确定为什么keyMapper
和valueMapper
不会获取关键功能对象
private static void populateHeader(Map<String, List<String>> headerMap,
Set<String> keys) {
headerMap= keys.stream()
.collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));
}
private static void populateHeader(映射头映射,
设置关键点){
headerMap=keys.stream()
.collect(Collectors.toMap(key->key.toString(),parseLine(key->key));
}
错误消息是:
错误:(83,91)java:不兼容的类型:java.lang.String不是
功能接口
大概parseLine(key->key)
应该是key->parseLine(key)
。从技术上讲,parseLine
可以返回正确类型的函数对象(Function
)
错误消息会有所帮助
你可以这样写:
headerMap = keys.stream().collect(
Collectors.toMap(Function.identity(), key -> parseLine(key))
);
值得注意的是,
headerMap
是一个参数,因此分配它有点奇怪。调用函数传递的值将不受影响。不确定代码最初失败的原因此处是有效的一行!
对于这段代码,我为每个需要加载标签字符串列表的键(Set key)获取一组键(Set key)(这是parseLine函数)。最后返回一个键及其标记的映射
。。。
Map>headerMap=keys.stream().collect(Collectors.toMap(key->key,key->parseLine(getHeaderLine(key)));
终于奏效了。
谢谢
JamesparseLine的签名是什么?修改:私有静态void populateHeader(设置键){Map headerMap=keys.stream().collect(collector.toMap(key->key.toString(),parseLine(getHeaderLine(key->key)));}公共静态列表parseLine(String cvsLine)。。。抛出错误:(83,91)java:不兼容的类型:java.lang.String不是函数接口,什么是
getHeaderLine
?请更新。(不直接相关,但应该是csvLine
逗号分隔值吗?)修改:私有静态void populateHeader(设置键){Map headerMap=keys.stream().collect(Collectors.toMap(key->key.toString(),parseLine(getHeaderLine(key->key));}公共静态列表parseLine(String cvsLine)…抛出错误:(83,91)java:不兼容的类型:java.lang.String不是函数接口
headerMap = keys.stream().collect(
Collectors.toMap(Function.identity(), key -> parseLine(key))
);