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> ...
随机推荐
- Codeforces Round #470 (rated, Div. 1, based on VK Cup 2018 Round 1) 923D 947D 948E D. Picking Strings
题: OvO http://codeforces.com/contest/947/problem/D 923D 947D 948E 解: 记要改变的串为 P1 ,记目标串为 P2 由变化规则可得: ...
- STS工具引入jar报问题?(问题待解决)
pom.xml文件中先引入ojdbc6,后修改成ojdbc7了,为啥还报下面的错误: Project 'nx-test-mybatis-oracle' is missing required libr ...
- java上传文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...
- SPOJ GSS1 - Can you answer these queries I(线段树维护GSS)
Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], -, A[N] . ( |A[i]| ≤ ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- laravel5.4的laravel-mix踩坑记
第一个坑,cross-env目录不对 sh: node_modules/cross-env/bin/cross-env.js: No such file or directory 我查了一下cross ...
- codeforces814E
https://lunch.blog.luogu.org/cf814e-an-unavoidable-detour-for-homedp-ji-shuo-post https://blog.csdn. ...
- springboot连接mongodb进行CRUD
springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...
- 什么是Servlet容器?
在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...
- 数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)
关键字 row_number() over (partition by) 例如,下面的数据, 这是按照name分组后,展示property值. 我们想得到这样的值; 第一步:将每一组的proper ...