You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Stream API按指定优先级规则对Person数组排序?

解决Java Stream按自定义优先级排序的问题

你可以通过自定义Comparator来实现需求中的排序规则,以下是两种可行的实现方式:

方式一:显式比较逻辑

直接在sorted方法中传入Lambda表达式,明确处理不同优先级的比较逻辑:

Arrays.stream(arr_Person)
      .sorted((a, b) -> {
          // 优先排列priority=0的元素
          if (a.getPriority() == 0 && b.getPriority() != 0) {
              return -1;
          } else if (a.getPriority() != 0 && b.getPriority() == 0) {
              return 1;
          }
          // 非0元素按priority降序排列
          return Integer.compare(b.getPriority(), a.getPriority());
      })
      .collect(Collectors.toList());

方式二:映射排序键(更简洁)

通过将priority映射为自定义排序键,利用默认的升序排序实现需求:

Arrays.stream(arr_Person)
      .sorted(Comparator.comparingInt(p -> 
          p.getPriority() == 0 ? 0 : 5 - p.getPriority()
      ))
      .collect(Collectors.toList());

逻辑说明:

  • 对于priority=0的元素,映射为排序键0,确保排在最前面
  • 对于priority=4的元素,映射为5-4=1;priority=3映射为2,以此类推,升序排序时就会呈现4→3→2→1的顺序

注意:代码中假设Person类提供了getPriority()方法用于获取priority字段,如果该字段是public修饰的,直接替换为p.priority即可。

内容的提问来源于stack exchange,提问作者user18240702

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:50:01