integer.compare可直接作为comparator方法引用用于stream.sorted(),因其静态方法签名经自动拆箱后匹配;升序用integer::compare,降序需reverseorder或手动反转;含null时须用nullslast/nullsfirst包装。

<p>可以直接把 <strong>Integer.compare</strong> 当作方法引用传给 <strong>Stream.sorted()</strong>,它天然符合 <code>Comparator<integer></integer></code> 函数式接口的签名。</p> <h3>为什么 Integer.compare 能直接用</h3> <p><strong>Integer.compare(int x, int y)</strong> 是一个静态方法,接收两个 <code>int</code> 参数,返回 <code>int</code>;而 <code>Comparator<integer>.compare(Integer a, Integer b)</integer></code> 接收两个 <code>Integer</code> 参数,也返回 <code>int</code>。Java 会自动拆箱(<code>Integer → int</code>)并匹配签名,所以 <code>Integer::compare</code> 可被当作 <code>Comparator<integer></integer></code> 使用。</p> <h3>升序排序写法</h3> <p>对整数流升序排列,最简洁的写法是:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Java注释规范Skills" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="overflowclass">Java注释规范Skills</a> <p class="overflowclass">当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。</p> </div> <a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
list.stream().sorted(Integer::compare).collect(Collectors.toList());- 等价于
list.stream().sorted(Comparator.naturalOrder()),但更底层、更明确 - 无需额外 lambda 或匿名类,语义清晰且性能无损耗
降序排序怎么处理
Integer.compare 本身只支持升序逻辑,要降序需稍作转换:
- 用
Comparator.reverseOrder():sorted(Comparator.reverseOrder()) - 或手动反转比较结果:
sorted((a, b) -> Integer.compare(b, a)) - 不推荐写
sorted((a, b) -> -Integer.compare(a, b)),负号可能引发整数溢出(虽然对 int 很少见,但语义不清)
注意 null 安全问题
Integer.compare 不能处理 null 值 —— 如果流中含 null,调用时会抛 NullPointerException:
- 若数据可能为 null,改用
Comparator.nullsLast(Integer::compare)或Comparator.nullsFirst(Integer::compare) - 例如:
sorted(Comparator.nullsLast(Integer::compare))把 null 放最后 - 原始
Integer::compare仅适用于确定不含 null 的场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










