sorting - thenComparing 与 thenComparingInt 的性能 - 使

我有一个问题,如果我正在比较整数,调用 thenComparingInt(My::intMethod) 与 thenComparing(My::intMethod) 是否存在性能差异,换句话说,如果我正在比较不同的类型,引用和原始,例如String, int, 等等。我的一部分只想说 comparing().thenComparing().thenComparing() 等等,但是如果第三次调用比较的是 int 或 Integer 值,我应该做 comparing.thenComparing().thenComparingInt() ?

我假设 comparing() 和 thenComparing() 使用 compareTo 方法在幕后比较任何给定类型,或者可能对于整数,Integer.compare?我还假设我原来的问题的答案可能涉及性能,因为 thenComparingInt 会知道正在传入一个 int,而 thenComparing 必须将 int 自动装箱为 Integer,然后可能会转换为 Object?

此外,我想到的另一个问题 - 是否有一种链接方法引用的方法,例如Song::getArtist::length 其中 getArtist 返回一个字符串?原因是我想做这样的事情:

songlist.sort(
            Comparator.comparing((Song s) -> s.getArtist().length()));


    songlist.sort(
            Comparator.comparing(Song::getArtist, 
                    Comparator.comparingInt(String::length)));


    songlist.sort(
            Comparator.comparing(Song::getArtist, String::length));

在这 3 个示例中,前两个编译但底部似乎在 Eclipse 中抛出编译错误,我本以为 String::length 的第二个参数有效?但也许不是因为它期望比较器不是函数?

最佳答案

问题一

我认为 thenComparingInt(My::intMethod) 可能更好,因为它应该避免装箱,但您必须尝试这两个版本,看看它是否真的有所作为。

问题2

songlist.sort(
        Comparator.comparing(Song::getArtist, String::length));

无效,因为第二个参数应该是 Comparator 而不是返回 int 的方法。

关于sorting - thenComparing 与 thenComparingInt 的性能 - 使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24452218/

相关文章:

git - 从 git 中的分支中提取最新提交

c# - 在 Entity Framework 中删除聚合根的子对象

vim - 防止重复的 UltiSnips 匹配

ruby-on-rails-4 - 如何使用 StringIO 设置 content_type 以使

oracle - Mysql Workbench 将 sql 导出到 Oracle 11

ruby-on-rails - 不知道如何构建任务 - cucumber

json - 在 JSON-RPC 连接上读取多个 JSON 对象

design-patterns - 策略接口(interface)中的策略模式和方法数量

stm32 - 如何使用带 PLL 的 HSE 将 RTC 时钟与 STM32 一起使用

spring - 错误 : "Connection refused: connect. 验证连接属性