Java:Comparator 排序问题

在这里插入图片描述
你们也看见上面的这个图了,最近在研究这里面的知识点,涉及到了自己的知识盲区,就是学习学习,可是越发学习,发现越多不懂的知识,今天分享的是 对象的排序问题。


需求
这里提出来一个需求,和简单,就是给对象列表中的对象按照一定的规则排序。

这里给出实体类,定义的是内部类,这里没有修饰符号,不知道大家是否还知道 private(类内部),default(类内部,包), protected(类内部,包,子类),public(类内部,包,子类,外部包),这些的作用范围。
这里使用的是lombok的注解,Data(包括一些setter,getter方法),AllargsConstructor(全参构造函数),NoArgsConstructor(无参构造方法)

@Data
@AllArgsConstructor
@NoArgsConstructor
class Employee{
   public String name;
   public Integer age;
   public BigDecimal salary;
}

定义三个Employee的对象,并放在List对象数组里面

	// 这里我提一下,你看我使用的是double构建salary,但是没有办法保证数据的准确性,结果就像下面,
	// 所以建议使用String来构建,例如e3
    Employee e1 = new Employee("李思", 20, new BigDecimal(2001.011) );
    Employee e2 = new Employee("Ace", 22, new BigDecimal(2002.012));
    Employee e3 = new Employee("jet5devil", 21, new BigDecimal("2003.013"));
    List<Employee> employees = Lists.newArrayList();
    employees.add(e1);
    employees.add(e2);
    employees.add(e3);

employees.forEach(System.out::println)-结果

testComparator.Employee(name=李思, age=20, salary=2001.01099999999996725819073617458343505859375)
testComparator.Employee(name=Ace, age=22, salary=2002.011999999999943611328490078449249267578125)
testComparator.Employee(name=jet5devil, age=21, salary=2003.013)

然后就是一系列的排序方式

使用sort实现排序
// one

	// sort 对象接收一个comparator函数式接口,可以传入一个lambda函数
	// compareTo 比较的是对象类型,例如String,Integer包装类型,BigDecimal 对象
	// getName 可以换成你想用什么来排序
    employees.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
    employees.forEach(System.out::println);

// two

	// 类似的,也可以使用Collections这个集合类的sort方法来实现这个需求
    Collections.sort(employees, (o1, o2) -> o1.getAge().compareTo(o2.getAge()));
    employees.forEach(System.out::println);

使用Comparator.comparing实现排序
// three

	// 使用Comparator.comparing 来实现
    employees.sort(Comparator.comparing(Employee::getAge));
    employees.forEach(System.out::println);

// four

	// 在comparing函数里面,添加了一个自定义的规则
    employees.sort(Comparator.comparing(Employee::getAge, (s1, s2)->{return s2.compareTo(s1);}));
    employees.forEach(System.out::println);

// five(实现反序)

	// 使用reversed()方法
    employees.sort(Comparator.comparing(Employee::getAge).reversed());
    employees.forEach(System.out::println);

对于Collections 依然适用。


参考文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值