为什么此Collectors.toMap有问题

时间:2020-01-24 16:40:05

标签: java lambda java-stream

我正在尝试将Set<String>转换为Map。但是我不确定keyMappervalueMapper为什么不采用关键功能对象。

private static void populateHeader(Map<String, List<String>> headerMap, 
             Set<String> keys) {
          headerMap= keys.stream()
          .collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));
    }

错误消息是:

错误:(83,91)java:不兼容的类型:java.lang.String不是 功能界面

2 个答案:

答案 0 :(得分:0)

      headerMap= keys.stream().collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));

大概parseLine(key -> key)应该是key -> parseLine(key)。从技术上讲,parseLine可以返回正确类型(Function<String,String>)的功能对象。

错误消息会有所帮助。

您可以这样写:

      headerMap = keys.stream().collect(
          Collectors.toMap(Function.identity(), key -> parseLine(key))
      );

值得注意的是,headerMap是一个参数,因此分配它有点奇怪。调用函数传递的值将不受影响。

答案 1 :(得分:0)

不知道为什么代码最初失败是在这里行! 对于此代码,我需要为每个需要加载字符串标签列表(即parseLine函数)的键获取一组键(设置键)。因此最后返回了键及其标签的地图

... Map> headerMap = keys.stream()。collect(Collectors.toMap(key-> key,key-> parseLine(getHeaderLine(key))))); ...

终于奏效了。 谢谢 詹姆斯