首页 > 编程语言 >JAVA8-用lamda表达式和增强版Comparator进行排序

JAVA8-用lamda表达式和增强版Comparator进行排序

时间:2022-12-01 20:02:21浏览次数:52  
标签:lamda name Comparator getName 增强版 humans add Human new


以前的排序一般对象实现Comparable或者Comparator接口,经常是通过匿名类类实现。
可以参见以前的博文 Java 中 ​​Comparable 和 Comparator 比较​​
现在看看使用lamda表达式和java8中增强的Comparator接口进行排序。

先定义一个简单的实体类:

class Human {
private String name;
private int age;

public Human() {
super();
}

public Human(final String name, final int age) {
super();

this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

1.使用lamda表达式或方法引用进行排序

lamda表达式

List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));

humans.sort((Human h1, Human h2) -> h1.getName().compareTo(h2.getName()));
//humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName()));//简化

当然lamda表达式也可以使用静态方法的引用代替。

public static int compareByNameThenAge(Human lhs, Human rhs) {
if (lhs.name.equals(rhs.name)) {
return lhs.age - rhs.age;
} else {
return lhs.name.compareTo(rhs.name);
}
}
List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));

humans.sort(Human::compareByNameThenAge);

2.使用增强版的Comparator接口

List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));

Collections.sort(humans, Comparator.comparing(Human::getName));

还可以使用反转

Collections.sort(humans, Comparator.comparing(Human::getName).reversed());

3.多条件排序

3.1使用lamda表达式

List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));
humans.add(new Human("Jack", 10));

humans.sort((lhs, rhs) -> {
if (lhs.getName().equals(rhs.getName())) {
return Integer.compare(lhs.getAge(), rhs.getAge());
} else {
return lhs.getName().compareTo(rhs.getName());
}
});

3.2使用Comparator进行组合

List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));
humans.add(new Human("Jack", 10));

humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge));


标签:lamda,name,Comparator,getName,增强版,humans,add,Human,new
From: https://blog.51cto.com/u_15899184/5904069

相关文章

  • 立足用户使用场景,BoCloud博云服务治理平台发布增强版
    近期,BoCloud博云服务治理平台BeyondMS基于市场情况反馈,发布了最新的增强版。BeyondMS服务治理平台是博云基于多种微服务架构的服务治理平台,提供经过生产验证的微服务框架+微......
  • Lamda表达式
    Lamda表达式λ希腊字母表中排序第十一位的字母,英语名称为lambdaLambda表达式是在Java8中引入的,并且成为了Java8最大的特点。它使得功能性编程变得非常便利,极大地......
  • Comparable vs Comparator in Java
    https://www.geeksforgeeks.org/comparable-vs-comparator-in-java/ Javaprovidestwointerfacestosortobjectsusingdatamembersoftheclass:  Comparabl......
  • Java——多线程:Lamda表达式
    多线程理解继承Thread类子类继承Thread类具备多线程能力启动线程:子类对象.start()不建议使用:避免oop单继承局限性实现Runnable接口实现接口Runnable具有多......
  • java——集合——Collections工具类——Collections集合工具类的方法——sort(List,Co
    Collection集合工具类的方法三java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:publicstaticvoidsort(Listlist,Comparator):将集合中元素按照......
  • Java--comparator接口与Comparable接口的区别
    1.Comparator和Comparable相同的地方他们都是java的一个接口,并且是用来对自定义的class比较大小的,什么是自定义class:如publicclassPerson{Stringname;int......
  • Java使用lamda表达式简化代码
    代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。要把有限的时间花到其它有意思的事情上去。目的学习简化代码的思路,使用jdk8新特性lamada表达式。推理......
  • Lamda表达式
    Lambda表达式λ希腊字母表中排序第十一位的字母,英文名称为Lambda其实质属于函数式编程的概念为什么要使用lambda表达式:避免匿名内部类定义过多可以让代码看起......
  • Lamda表达式
    Lamda表达式避免匿名内部类定义过多;使得代码简洁其实质属于函数式编程的概念(params)->expression[表达式](params)->statement[语句](params)->{statements}......
  • JAVA8-Lambda-(sorted+Comparator)排序
    使用场景:排队的时候按照个子大小排队使用API排序和MySql中的升序降序规则一样。在排序时需要注意的是降序需要用到reversed();publicstaticvoidmain(String[]......