然后比较比较比较的表现 - 使用哪个?

时间:2014-06-27 12:47:21

标签: sorting java-8 comparator

我有一个问题,如果我正在比较整数,那么调用thenComparingInt(My :: intMethod)与thenComparing(My :: intMethod)之间是否存在性能差异,换句话说,如果我' m比较差异类型,参考和原始,例如String,int等。我只想说compare()。thenComparing()。thenComparing()等,但是我应该比较.thenComparing()。thenComparingInt()如果第三个调用是比较int或Integer值?

我假设compare()和thenComparing()使用compareTo方法来比较幕后的任何给定类型,或者可能是int,Integer.compare?我也假设我的原始问题的答案可能涉及性能,然后比较Int将知道正在传入int,然后,然后比较必须将autobox 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的第二个参数是有效的吗?但也许不是因为它期望比较器不是一个功能?

1 个答案:

答案 0 :(得分:2)

问题1

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

问题2

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

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

相关问题