一,List<Integer>的排序
示例代码:
List<Integer> list = new ArrayList<Integer>();
list.add(6);
list.add(8);
list.add(4);
list.add(5);

//正序排(从小到大)
Collections.sort(list);
System.out.println(list.toString());

//倒叙排 (注意:倒叙的话就是按照添加的顺序进行倒叙! 可查看自测结果,字符串和数字都是如此)
Collections.reverse(list);
System.out.println(list.toString());

(自测结果)

运行结果:
正序排(从小到大):[4, 5, 6, 8]
倒叙排(从大到小):[8, 6, 5, 4]

二,对类中单个字段进行排序
1.类实现Comparable接口的compareTo方法
定义product类:
public class Product implements Comparable<Product>{
/**
* ID
*/
private Integer id;
/**
* 数量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, Integer num) {
super();
this.id = id;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
@Override
public int compareTo(Product o) {
if(this.num>=o.getNum()) {
return 1;
}
return -1;
}
}
测试代码:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, 50));
productList.add(new Product(1, 30));
productList.add(new Product(1, 10));
productList.add(new Product(1, 55));
productList.add(new Product(1, 70));

//按照数量从小到大排序
productList.sort(Comparator.naturalOrder());
System.out.println("按照数量从小到大排序:");
for (Product product : productList) {
System.out.println(product.toString());
}

//按照数量从大到小排序
productList.sort(Comparator.reverseOrder());
System.out.println("按照数量从大到小排序:");
for (Product product : productList) {
System.out.println(product.toString());
}

运行结果:
按照数量从小到大排序:
Product [id=1, num=10]
Product [id=1, num=30]
Product [id=1, num=50]
Product [id=1, num=55]
Product [id=1, num=70]
按照数量从大到小排序:
Product [id=1, num=70]
Product [id=1, num=55]
Product [id=1, num=50]
Product [id=1, num=30]
Product [id=1, num=10]

2.使用Comparator类进行排序
定义Product类:
public class Product{
/**
* ID
*/
private Integer id;
/**
* 数量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, Integer num) {
super();
this.id = id;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
}
测试代码:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, 50));
productList.add(new Product(1, 30));
productList.add(new Product(1, 10));
productList.add(new Product(1, 55));
productList.add(new Product(1, 70));
//按照数量从小到大排序
Collections.sort(productList, new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
});
System.out.println("按照数量从小到大排序:");
for (Product product : productList) {
System.out.println(product.toString());
}

//按照数量从大到小排序
Collections.sort(productList, Collections.reverseOrder(new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
}));
System.out.println("按照数量从大到小排序:");
for (Product product : productList) {
System.out.println(product.toString());
}

运行结果:
按照数量从小到大排序:
Product [id=1, num=10]
Product [id=1, num=30]
Product [id=1, num=50]
Product [id=1, num=55]
Product [id=1, num=70]

按照数量从大到小排序:
Product [id=1, num=70]
Product [id=1, num=55]
Product [id=1, num=50]
Product [id=1, num=30]
Product [id=1, num=10]

三,对类中多个字段进行排序
定义Product类:
import java.math.BigDecimal;

public class Product{
/**
* ID
*/
private Integer id;
/**
* 价格
*/
private BigDecimal price;
/**
* 数量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, BigDecimal price, Integer num) {
super();
this.id = id;
this.price = price;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", price=");
builder.append(price);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
}
测试代码:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, new BigDecimal(60), 50));
productList.add(new Product(2, new BigDecimal(70), 30));
productList.add(new Product(3, new BigDecimal(80), 10));
productList.add(new Product(4, new BigDecimal(75), 55));
productList.add(new Product(5, new BigDecimal(30), 70));
productList.add(new Product(5, new BigDecimal(75), 60));
//按照价格从小到大排序,如果价格相等,则按照剩余数量从小到大排序
Collections.sort(productList,new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getPrice().compareTo(o2.getPrice())==0) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
return o1.getPrice().compareTo(o2.getPrice());
}
});
for (Product product : productList) {
System.out.println(product.toString());
}

运行结果:
Product [id=5, price=30, num=70]
Product [id=1, price=60, num=50]
Product [id=2, price=70, num=30]
Product [id=4, price=75, num=55]
Product [id=5, price=75, num=60]
Product [id=3, price=80, num=10]
---------------------

如何给 List 集合排序的更多相关文章

  1. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  2. ArrayList集合排序

    using System;using System.Collections;using System.Collections.Generic;using System.Text; namespace ...

  3. 【Java进阶】---map集合排序

    map集合排序         这篇文章讲的不仅仅是map排序,比如把对象按某一属性排序,它都可以解决这些问题.   比如,有N个对象,每个对象有个属性就是成绩,成绩分:优秀,良好,合格.那我们如何按 ...

  4. CopyOnWriteArrayList集合排序异常问题

    1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * ...

  5. 二维码扫描&集合排序

    一.二维码扫描机制 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构 ...

  6. .Net中集合排序的一种高级玩法

    背景: 学生有名称.学号, 班级有班级名称.班级序号 学校有学校名称.学校编号(序号) 需求 现在需要对学生进行排序 第一排序逻辑 按学校编号(序号)排列 再按班级序号排列 再按学生学号排列 当然,在 ...

  7. Java集合排序及java集合类详解--(Collection, List, Set, Map)

    1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...

  8. Java提高(5)---map集合排序

    map集合排序 这篇文章讲的不仅仅是map排序,比如把对象按某一属性排序,它都可以解决这些问题. 比如,有N个对象,每个对象有个属性就是成绩,成绩分:优秀,良好,合格.那我们如何按照成绩的好坏进行排序 ...

  9. 集合排序 Comparator和Comparable的使用区别

    Java 排序 Compare  Comparator接口 Comparable接口 区别 在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的 ...

  10. map集合排序

    默认情况下,HashMap.HashTable.TreeMap.LinkedHashMap的排列顺序比较: package com.per.sdg.demo; import java.util.Has ...

随机推荐

  1. JS中数据结构之列表

    列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素可以是任意数据类型.列表中可以保存多少元素并没有事先限定并可以不断壮大,实际使用时元素的数量受到程序内存的限 ...

  2. AT2000 Leftmost Ball(计数dp+组合数学)

    传送门 解题思路 设\(f[i][j]\)表示填了\(i\)个白色,\(j\)种彩色的方案数,那么显然\(j<=i\).考虑这个的转移,首先可以填一个白色,就是\(f[i][j]=f[i-1][ ...

  3. [CSP-S模拟测试]:Lighthouse(哈密顿回路+容斥)

    题目背景 $Billions\ of\ lighthouses...stuck\ at\ the\ far\ end\ of\ the\ sky.$ 题目描述 平面有$n$个灯塔,初始时两两之间可以相 ...

  4. English-Useful sentences

    很乐意 pull request. Pleased to pull request. 这个项目现在已经被弃用了. This project is now deprecated. 如你下面看到的,你可以 ...

  5. Visual Studio Code - 调试 Node.js 代码

    官方的文档写的太好了!大家还是看参考资料吧. 参考资料: Debugging in Visual Studio Code Debug Node.js Apps using Visual Studio ...

  6. NTP时钟调整策略

    一.        问题背景 天威视讯项目3月底发生了一次点播出现节目请求超时的情况,在查询故障的过程中,发现MAP服务器操作系统的时钟被向前调整了11秒,姑且不论是否是这个原因导致的故障,但每台服务 ...

  7. js-xlsx sheet_to_json 读取小数位数变多

    read as string . 例如:2.85 读取后变成 2.84999999999999999 这种. 以字符串形式读取. XLSX.utils.sheet_to_json(workbook.S ...

  8. 【计算机网络】两个网络模型——OSI参考模型和TCP/IP模型

    计算机网络 两个网络模型 计算机网络模型 分层机制----规划通讯细节 层与层之间之间是独立的.屏蔽的,下层为上层提供服务. 一些概念 实体: 任何发送/接收信息的软件/硬件进程. 对等层: 两个不同 ...

  9. FlowProtal jQuery 对比时间大小

    function ValidatoTime(source, args){ var StartTime = agent.calcExpress(null, 'SCTDB:AS_MeetingRoom.S ...

  10. go读写excel文件

    首先,需要安装golang用来操作excel文档的类库: go get github.com/Luxurioust/excelize 一.excel文件创建与写入 package main impor ...