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)));

终于奏效了。 谢谢
James

parseLine的签名是什么?修改:私有静态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))
      );