我有一个问题,如果我正在比较整数,调用 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/