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> ...
随机推荐
- 【专题】Spring Boot 2.x 面试题
1.Spring Boot.Spring MVC 和 Spring 有什么区别? SpringFramework 最重要的特征是依赖注入.所有 SpringModules 不是依赖注入就是 IOC 控 ...
- 4、Spring Boot 2.x 自动配置原理
1.4 Spring Boot 自动配置原理 简介 spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子: Spring的JdbcTemplate ...
- day42_Oracle学习笔记_01
一.Oracle Database 的基本概念 1.1.一个Oracle服务器 详解如下: 一个Oracle服务器是一个关系型数据管理系统(RDBMS),它提供开放的,全面的,近乎完整的信息管理. ...
- PhpStorm 使用 Stylus 回车自动缩进的问题
如图所示,取消勾选即可换行自动缩进,不用再一个个打空格了!
- 自制操作系统-使用汇编显示 hello world
Windows (开机)读软盘第一个扇区的读法的具体表格 Hello World汇编版 就是将16进制编写的代码使用汇编语言编写出来 ; cherry-os ORG 0x7c00 ;指定程序装载的位置 ...
- 八十年代的经典 NFS和AFS
NFS:(C/S模式) 大体架构: 1985年Sun公司基于UDP开发了网络共享文件系统(Network FileSystem) NFS由一系列NFS命令和进程组成的客户机/服务器模式,在第三版中加入 ...
- Go语言 之捧腹网爬虫案例
package main import ( "fmt" "net/http" "os" "regexp" "s ...
- 什么是Servlet容器?
在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...
- CTF辅助脚本
首先推荐这篇文章,网上有多次转载,这是我见过日期比较早的 CTF中那些脑洞大开的编码和加密 凯撒密码 flag='flag{abcdef}' c='' n=20 for i in flag: if ' ...
- Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明
线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...