【问题标题】:Restrict method reference parameter type限制方法引用参数类型
【发布时间】:2022-06-15 23:45:51
【问题描述】:
Set<String> premiumStrings = new HashSet<>();
Set<String> sortedSet = new TreeSet<>(Comparator.comparing(premiumStrings::contains).thenComparing(Comparator.naturalOrder()));

这不起作用,因为premiumStrings::contains 可以接受任何对象而不仅仅是字符串。可以用(String s) -&gt; premiumStrings.contains(s) 替换它,但是有没有办法限制参数类型,同时仍然使用方法引用 lambda?

(具体来说,问题是The method thenComparing(Comparator&lt;? super Object&gt;) in the type Comparator&lt;Object&gt; is not applicable for the arguments (Comparator&lt;Comparable&lt;? super Comparable&lt;? super T&gt;&gt;&gt;)。)

【问题讨论】:

标签: java lambda method-reference


【解决方案1】:

帮助编译器处理类型:

Set<String> sortedSet = new TreeSet<>(
                Comparator.<String, Boolean>comparing(o -> premiumStrings.contains(o)).thenComparing(Comparator.naturalOrder()));

【讨论】:

  • 如果您将o -&gt; ... 更改为premiumStrings::contains,那么这正是我正在寻找的。 :)
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 2017-08-31
  • 2023-03-20
  • 2020-05-22
相关资源
最近更新 更多