【问题标题】:Java lambda toMap of Map<String, Boolean>Map<String, Boolean> 的 Java lambda toMap
【发布时间】:2017-01-31 02:35:21
【问题描述】:

我不明白为什么会失败;

Map<String, Boolean> iMap = Arrays.asList("1","2","3","4","5").stream()
  .collect(Collectors.toMap(k->k, Boolean.TRUE));

错误信息:

Multiple markers at this line
    - Type mismatch: cannot convert from T to K
    - The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) 
      in the type Collectors is not applicable for the arguments ((<no type> k) -> {}, Boolean)

任何帮助表示赞赏。

【问题讨论】:

  • toMap 的第二个参数的类型是什么?
  • 不是函数。明白了,谢谢。
  • 你可以直接用Stream.of("1","2","3","4","5")代替Arrays.asList("1","2","3","4","5").stream()来表达你的意图。

标签: java collections lambda


【解决方案1】:

Collectors.toMap() 期望两个参数的 Function。您正在尝试传递 Boolean 。试试这个:

Collectors.toMap(k->k, k->Boolean.TRUE)

【讨论】:

  • 真的吗? Collectors.toMap(k->k, v->Boolean.TRUE) 不是更好读吗?
  • @Nicholas 这是误导。 k 不代表键,它代表流元素。使用v 作为第二个参数只会传播混乱。
  • 该死,我会掌握这个窍门的。 Collectors.toMap(s-&gt;s, s-&gt;Boolean.TRUE)
猜你喜欢
  • 2016-12-03
  • 2011-04-07
  • 2011-11-24
  • 2018-04-19
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多