【问题标题】:Using Comparator.thenComparing for passed string使用 Comparator.thenComparing 传递字符串
【发布时间】:2021-02-02 18:12:38
【问题描述】:

我正在使用流来尝试在映射中创建键的数组列表,首先按值(整数)排序​​,然后按字母顺序对键进行排序。我让它们按值排序,但在尝试按字母顺序比较它们时出现错误:

 return map.keySet()
          .stream()
          .sorted(Comparator.comparing( (k1) -> map.get(k1)).thenComparing(String::compareTo)) //ErrorHere
          .toArray(String[]::new);

Coc-java 给我一个The method thenComparing(Comparator<? super Object>) in the type Comparator<Object> is not applicable for the arguments (String::compareTo) 错误。我之前用过thenComparing,但是.sorted 方法看起来像这样:

    .sorted(Comparator.comparing(String::length).thenComparing(String::compareTo))

这没有产生错误并且工作正常。我想这可能与 lamda 返回的内容有关?

【问题讨论】:

    标签: java algorithm sorting lambda comparator


    【解决方案1】:

    您可能只需要明确指定类型,例如Comparator.comparing((String k1) -> map.get(k1)),或Comparator.<String, WhateverTheValueTypeIs>comparing(map::get)

    【讨论】:

    • 是的,这就是问题所在!非常感谢。
    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多