我有一个问题,如果我正在比较整数,那么调用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的第二个参数是有效的吗?但也许不是因为它期望比较器不是一个功能?
答案 0 :(得分:2)
问题1
我认为thenComparingInt(My::intMethod)
可能会更好,因为它应该避免拳击,但你必须尝试两个版本,看它是否真的有所作为。
问题2
songlist.sort(
Comparator.comparing(Song::getArtist, String::length));
无效,因为第二个参数应该是Comparator
而不是返回int的方法。