Java 中多条件排序

Collections.sort(ghEntityList, new Comparator<GongHuiEntity>() {
  @Override
  public int compare(GongHuiEntity o1, GongHuiEntity o2) {
  if (o1 == null || o2 == null) {
    return 0;
  }  
  //第一次比较等级
  int i = o2.getGongHuiModel().getLevel() - o1.getGongHuiModel().getLevel();
  //如果等级相同比较经验
  if(i == 0){
    int o1Exp = o1.getGongHuiModel().getExp();
    int o2Exp = o2.getGongHuiModel().getExp();
    int j = o2Exp - o1Exp;
    return j;
  }
  return i;
  }
});

转载于:https://www.cnblogs.com/cci8go/p/4892272.html

### Java Stream API 多条件排序示例 在 Java 中,`Stream API` 提供了一种简洁而强大的方式来处理集合数据。对于多条件排序的需求,可以利用 `Comparator.comparing()` 方法链式调用来实现多个排序条件。 以下是基于 `Stream API` 的一个多条件排序的例子: #### 示例代码 假设有一个表示员工的类 `Employee`,其中包含字段 `age` 和 `name`,我们希望先按年龄升序排列,如果年龄相同,则按照姓名降序排列。 ```java import java.util.*; import java.util.stream.Collectors; class Employee { String name; int age; public Employee(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Employee{name='" + name + "', age=" + age + "}"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("Alice", 30), new Employee("Bob", 25), new Employee("Charlie", 30), new Employee("David", 25) ); List<Employee> sortedEmployees = employees.stream() .sorted(Comparator.comparing(Employee::getAge) // 首先按年龄升序 .thenComparing((e1, e2) -> e2.getName().compareTo(e1.getName()))) // 如果年龄相同,按名字降序 .collect(Collectors.toList()); System.out.println(sortedEmployees); } } ``` 在这个例子中: - 使用了 `Comparator.comparing()` 来指定第一个排序条件——按年龄升序。 - 使用了 `.thenComparing()` 进一步定义第二个排序条件——当年龄相同时,按名称降序[^1]。 #### 输出结果 运行上述程序会得到如下输出: ``` [Employee{name='Bob', age=25}, Employee{name='David', age=25}, Employee{name='Charlie', age=30}, Employee{name='Alice', age=30}] ``` 这表明列表已成功按两个条件进行了排序:首先是按年龄从小到大;其次是按名字从大到小(字母顺序相反)。 #### 关键点说明 - **`Comparator.comparing()`**: 它接受一个函数作为参数,用于提取比较的关键属性。 - **`.thenComparing()`**: 可以附加额外的比较逻辑,在前一条件无法区分的情况下生效。 - 当需要自定义比较器时,可以直接传入 `(o1, o2)` 形式的 lambda 表达式[^2]。 通过这种方式,能够灵活地构建复杂的排序规则。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值