java8怎么按照两个字段的乘积排序_Java8对多个字段排序

Java8对多个字段排序

创建User对象

public class Users {

private Long id;

private String name;

private String code;

private Long supId;

private List usersList;

public Users() {

}

public Users(Long id, String name, String code, Long supId) {

this.id = id;

this.name = name;

this.code = code;

this.supId = supId;

}

}

编写测试类

public class Demo01 {

List usersList = new ArrayList<>();

@Before

public void generateData() {

usersList.add(new Users(1l, "张三", "20", 0L));

usersList.add(new Users(2l, "李四1", "22", 1L));

usersList.add(new Users(4l, "王五1", "20", 2L));

usersList.add(new Users(3l, "李四2", "20", 1L));

usersList.add(new Users(6l, "王五3", "22", 2L));

usersList.add(new Users(5l, "王五2", "21", 2L));

usersList.add(new Users(7l, "王五4", "23", 2L));

}

@Test

public void demo1() {

List collect = usersList.stream().sorted(Comparator.comparing(Users::getSupId).thenComparing(Users::getCode)).collect(Collectors.toList());

for (Users users : collect) {

System.out.println(users);

}

}

}

以上代码含义是:通过supId字段进行排序,如果supId相同则按照code字段排序。结果集:

Users{id=1, name=‘张三‘, code=‘20‘, supId=0}

Users{id=3, name=‘李四2‘, code=‘20‘, supId=1}

Users{id=2, name=‘李四1‘, code=‘22‘, supId=1}

Users{id=4, name=‘王五1‘, code=‘20‘, supId=2}

Users{id=5, name=‘王五2‘, code=‘21‘, supId=2}

Users{id=6, name=‘王五3‘, code=‘22‘, supId=2}

Users{id=7, name=‘王五4‘, code=‘23‘, supId=2}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中按两个字段排序可以使用Comparator接口来实现。Comparator接口提供了compare()方法来比较两个对象的大小,并且可以用于排序操作。 下面是一个按两个字段排序的示例代码: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class PersonComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { // 先按照name排序 int nameCompare = p1.getName().compareTo(p2.getName()); if (nameCompare != 0) { return nameCompare; } // 如果name相同,按照age排序 return Integer.compare(p1.getAge(), p2.getAge()); } } public class Main { public static void main(String[] args) { List<Person> people = new ArrayList<>(); people.add(new Person("Alice", 25)); people.add(new Person("Bob", 30)); people.add(new Person("Alice", 20)); people.add(new Person("Bob", 25)); Collections.sort(people, new PersonComparator()); for (Person p : people) { System.out.println(p.getName() + " " + p.getAge()); } } } ``` 输出结果: ``` Alice 20 Alice 25 Bob 25 Bob 30 ``` 在上面的示例代码中,我们定义了一个Person类,里面包含了name和age两个字段。然后我们定义了一个PersonComparator类,实现了Comparator接口,并重写了compare()方法。在compare()方法中,我们先按照name进行比较,如果name相同,再按照age进行比较。最后,我们在main()方法中使用Collections.sort()方法对people列表进行排序,并传入PersonComparator对象作为比较器。最后输出排序后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值