java实现List<People>的排序
1、首先新建测试的实体类(People类):
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; @Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class People {
private Integer id;
private String name;
private Integer age;
}
2、开始测试,代码如下:
方式一:使用Collections工具类的静态方法sort(List<People> list, Comparator<? super People> c)
其中,参数1:排序的List集合, 参数2:Comparator接口的子实现(需要重写compare方法来指定排序方式)
import com.jieku.pojo.People;
import org.junit.Test; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class TestList { @Test
public void testSortList(){
People p1 = new People(101,"a",19); // 准备数据
People p2 = new People(103,"c",13);
People p3 = new People(102,"b",14);
People p4 = new People(104,"d",15);
People p5 = new People(105,"d",15);
List<People> ps = new ArrayList<>(); // 新建List
ps.add(p1); // 往List中放值
ps.add(p2);
ps.add(p3);
ps.add(p4);
ps.add(p5);
System.out.println("没有进行年龄排序前:");
for (People p : ps) {
System.out.println(p);
}
// 使用Collections工具类的sort方法,重写其compare方法
Collections.sort(ps, new Comparator<People>() {
@Override
public int compare(People o1, People o2) {
// -1为正序(从大到小)
// 1为倒序(从小到大)
// 大的在前
if(o1.getAge() > o2.getAge()){ // 如果o1的年龄比o2大,则o1排前面
return -1;
}else if(o1.getAge() == o2.getAge()){
return 0;
}else{ // 小的在后
return 1;
}
}
});
System.out.println("按照年龄排序后----------------------");
for (People p : ps) {
System.out.println(p);
}
System.out.println("按照编号排序后---------------------使用lambda");
Collections.sort(ps, (o1, o2) -> {
// 按照id的正序
if(o1.getId() > o2.getId()){ // id大的排最后
return 1;
}else if(o1.getId() == o2.getId()){
return 0;
}else{ // 否则,id小的排最前面
return -1;
}
});
// 打印排序后的结果
for (People p : ps) {
System.out.println(p);
}
}
}
3、测试结果如下:

方拾二:通过实体类实现Comparable<T>接口,并且实现未实现的方法compareTo(T t),定义其比较规则,然后再通过Collections工具类的sort方法即可实现排序。
实体类的代码如下:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; @Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Dog implements Comparable<Dog>{
private Integer id;
private String name;
private Integer age; @Override
public int compareTo(Dog o) {
return this.getAge() - o.getAge();
}
}
测试类的代码如下:
@Test
public void testSortList3(){
Dog p1 = new Dog(101,"a",19); // 准备数据
Dog p2 = new Dog(103,"c",13);
Dog p3 = new Dog(102,"b",14);
Dog p4 = new Dog(104,"d",15);
Dog p5 = new Dog(105,"d",15);
List<Dog> ps = new ArrayList<>(); // 新建List
ps.add(p1); // 往List中放值
ps.add(p2);
ps.add(p3);
ps.add(p4);
ps.add(p5);
System.out.println("没有进行年龄排序前:");
for (Dog p : ps) {
System.out.println(p);
}
System.out.println("----------------排序后----------------------");
// 直接使用工具类的sort的方法
Collections.sort(ps);
for (Dog p : ps) {
System.out.println(p);
}
}
执行结果如下:

至此,测试完成!
java实现List<People>的排序的更多相关文章
- java提供的默认list排序方法-转
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- java Collections.sort()实现List排序的默认方法和自定义方法
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- Java版冒泡排序和选择排序
一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...
- Java数据结构和算法 - 简单排序
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java 中常见的各种排序算法汇总
首先,Java中自已是有排序的 说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是 ...
- Java ArrayList中对象的排序 (Comparable VS Comparator)
我们通常使用Collections.sort()方法来对一个简单的数据列表排序.但是当ArrayList是由自定义对象组成的,就需要使用comparable或者comparator接口了.在使用这两者 ...
- Java实现:数据结构之排序
Java实现:数据结构之排序 0.概述 形式化定义:假设有n个记录的序列(待排序列)为{ R1, R2 , -, Rn },其相应的关键字序列为 { K1, K2, -, Kn }.找到{1,2, - ...
- java Collections.sort()实现List排序的默认方法和自定义方法【转】
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- JAVA通过使用sort方法排序
java 代码: 对集合排序: //升序public void listSort1(){ List<Integer> list = new ArrayList<Integer> ...
随机推荐
- 【算法进阶-康托展开】-C++
目录 引入 这位老爷子就是康托 基本概念 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有n个数(1,2,3,4,-,n),可以有组成不同(n!种)的排列组合,康托展开表 ...
- scrapy3 中间件的使用
前情提要: 补充知识点: ua请求头库的使用 安装: pip install fake-useragent 使用: from fake_useragent import UserAgent ua = ...
- java线程安全与不安全的理解
存在成员变量(全局变量)的类用于多线程时是不安全的,不安全体现在这个成员变量可能发生非原子性的操作,而变量定义在方法内也就是局部变量是线程安全的. 想想在使用struts1时,不推荐创建成员变量,因为 ...
- 利用模板和C++11特性实现的智能指针-作用同share_ptr
根据C++11特性实现,基本上实现了同SharePtr同样的功能,有时间继续优化.之前一直以为引用计数是一个静态的int类型,实际上静态值是不可以的.之前项目中总是不太习惯使用智能指针.通过自实现的方 ...
- 校庆神秘建筑(HDU 1411)
Problem 杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑物有点象古老埃及的金字塔, ...
- JAVA基础知识|抽象类与接口类
一.抽象类 抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明 抽象方法:没有方法体的方法,必须要使用abstract修饰 为什么要使用抽象类,抽象方法? 举例来说,如果你定义了一个 ...
- pwn学习日记Day16 pwn原理理解
CTF-Pwn入门及栈溢出原理解释 CTF pwn 中最通俗易懂的堆入坑指南 看雪论坛
- vagrant box镜像百度下载地址
1.centos7 链接:https://pan.baidu.com/s/1JuIUo4HL0lm1EtUKaoMpaA提取码:w9a8 2.vagrant-ubuntu-server-16.04-x ...
- UML期末复习题——2.4:Domain Model
第四题:领域模型 重要概念: 1. 领域模型:是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型,领域对象模型和分析对象模型. 2. 应用UML表示法,领域模型被描述为一组没有定义 ...
- Facebook币Libra学习-3.小试牛刀第一笔交易
我们提供了一个命令行界面(CLI)客户端来与区块链进行交互. 假设 本文档中的所有命令均假定: 您运行的是Linux(基于Red Hat或Debian)或macOS系统. 您可以稳定地连接到互联网. ...