【问题标题】:Why does this Collectors.toMap have issues为什么这个 Collectors.toMap 有问题
【发布时间】:2020-01-24 16:40:05
【问题描述】:

我正在尝试将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 不是 功能界面

【问题讨论】:

  • parseLine的签名是什么?
  • 修改:private static void populateHeader(Set keys) { Map> headerMap= keys.stream().collect(Collectors.toMap(key -> key. toString(),parseLine(getHeaderLine(key -> key)))); } public static List parseLine(String cvsLine)... throws Error:(83, 91) java: incompatible types: java.lang.String is not a functional interface
  • 什么是getHeaderLine?请edit the question获取更新。
  • (不直接相关,但应该是csvLine,如逗号分隔值?)

标签: java lambda java-stream


【解决方案1】:
      headerMap= keys.stream().collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));

大概parseLine(key -&gt; key) 应该是key -&gt; parseLine(key)。从技术上讲,parseLine 可以返回正确类型的函数对象 (Function&lt;String,String&gt;)。

错误信息会有所帮助。

你可以这样写:

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

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

【讨论】:

  • 修改:private static void populateHeader(Set keys) { Map> headerMap= keys.stream().collect(Collectors.toMap(key -> key. toString(),parseLine(getHeaderLine(key -> key)))); } public static List parseLine(String cvsLine)... throws Error:(83, 91) java: incompatible types: java.lang.String is not a functional interface
【解决方案2】:

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

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

终于成功了。 谢谢 詹姆斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2021-08-20
    • 2015-09-23
    • 2021-02-27
    相关资源
    最近更新 更多