为什么这个collectors.tomap有问题

t2a7ltrp  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(438)

我想把一个 Set<String> 变成一个 Map . 但我不知道为什么 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)));
    }

错误消息是:
错误:(83,91)java:不兼容的类型:java.lang.string不是函数接口

8mmmxcuj

8mmmxcuj1#

不知道为什么代码最初失败这里是行的工作!对于这段代码,我为每个键获得一组键(set keys),我需要加载一个标签的字符串列表(这是parseline函数)。最后返回一个键及其标记的Map
... map>headermap=keys.stream().collect(collectors.tomap(key->key,key->parseline(getheaderline(key)))。。。
终于成功了。谢谢你,詹姆斯

az31mfrm

az31mfrm2#

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 是一个参数,所以赋值有点奇怪。调用函数传递的值将不受影响。

相关问题