【发布时间】:2014-06-27 12:47:21
【问题描述】:
我有一个问题,如果我在比较整数,那么调用 thenComparingInt(My::intMethod) 与 thenComparing(My::intMethod) 是否存在性能差异,换句话说,如果我在比较不同的类型,参考和原始,例如String, int 等。我的一部分只是想说 compare().thenComparing().thenComparing() 等,但如果第三次调用比较 int 或 Integer 值,我应该做 compare.thenComparing().thenComparingInt() ?
我假设 compare() 和 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 的第二个参数是有效的?但也许不是因为它期望 Comparator 而不是函数?
【问题讨论】:
标签: sorting java-8 comparator