java中的排序(自定义数据排序)--使用Collections的sort方法
排序:将一组数据按相应的规则 排列 顺序
- 内置引用类型(String,Integer..),内部已经指定规则,直接使用即可。----实现Comparable接口
1. 整数、 Integer..:根据基本数据类型大小
2. Character(字符):根据Unicode编码顺序
3. String(字符串):
1)如果其中一个是另一个起始开始的子串,返回长度之差,
2)否则返回第一个不相等的Unicode之差。
4. 日期:根据日期的长整型数比较。
- 自定义引用类型,需要按照业务规则排序。有两种方式,分别如下所述:
package top.wfaceboss.sort.refType2;
public class Goods {
// 价格
private double price;
// 商品名称
private String name;
// 收藏量
private int fav;
public Goods() {
}
public Goods(String name,double price, int fav) {
super();
this.price = price;
this.name = name;
this.fav = fav;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFav() {
return fav;
}
public void setFav(int fav) {
this.fav = fav;
}
@Override
public String toString() {
return "商品名:" + this.name + ",收藏量:" + this.fav + ",价格:" + this.price + "\n";
}
}
(2)新建业务排序类(实现java.util.Comparator接口),编写符合业务要求的排序方法,如下是按照价格排序的业务类(降序)
package top.wfaceboss.sort.refType2; /**
* 按照价格排序的业务类(降序)
*
* @author Administrator
*
*/
public class GoodsPriceCompare implements java.util.Comparator<Goods> { @Override
public int compare(Goods o1, Goods o2) { return -(o1.getPrice()-o2.getPrice()>0?1:o1.getPrice()==o2.getPrice()?0:-1);//降序
} }
(3)使用业务排序类
package top.wfaceboss.sort.refType2; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class GoodsApp {
public static void main(String[] args) {
List<Goods> list = new ArrayList<Goods>();
list.add(new Goods("老马视频", 100, 2000));
list.add(new Goods("老高视频", 50, 2000));
list.add(new Goods("老裴视频", 1000, 1000));
System.out.println("排序前:" + list);
Collections.sort(list,new GoodsPriceCompare());
System.out.println("排序后:"+list);
}
}
package top.wfaceboss.sort.refType; import java.text.SimpleDateFormat;
import java.util.Date; /**
* 新闻条目实体类 排序方式: java.lang.Comparable+compareTo
*
* @author Administrator
* @param <T>
*
*/
public class NewsItem implements java.lang.Comparable<NewsItem> {
// 标题
private String title;
// 点击量
private int hits;
// 时间
private Date pubTime; public int getHits() {
return hits;
} public void setHits(int hits) {
this.hits = hits;
} public NewsItem() { } public NewsItem(String title, int hits, Date pubTime) {
super();
this.title = title;
this.hits = hits;
this.pubTime = pubTime;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Date getPubTime() {
return pubTime;
} public void setPubTime(Date pubTime) {
this.pubTime = pubTime;
} // 时间降序+点击量升序+标题降序
@Override
public int compareTo(NewsItem o) {
System.out.println("============dd==========");
int result = 0;
// 比较时间
result = -this.pubTime.compareTo(o.pubTime);// 降序
if (0 == result) {// 时间相同
// 点击量
result = this.hits - o.hits;// 升序
if (0 == result) {// 点击量相同
// 标题
result = -this.title.compareTo(o.title);// 降序
}
}
return result;
} @Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("标题:").append(this.title);
sb.append(",时间:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime));
sb.append(",点击量:").append(this.hits).append('\n');
return sb.toString();
} }
(2)使用java自带的Collections调用sort,对该实体类的实例进行排序:
package top.wfaceboss.sort.refType; import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List; /**
* 使用Collections
*
*/
public class NewsItemApp {
public static void main(String[] args) {
List<NewsItem> news = new ArrayList<NewsItem>();
news.add(new NewsItem("aaa", 50, new Date()));
news.add(new NewsItem("bbb", 60, new Date(System.currentTimeMillis() - 1000 * 60 * 60)));
news.add(new NewsItem("ccc", 30, new Date(System.currentTimeMillis() + 1000 * 60 * 60))); Collections.sort(news);
System.out.println(news);
}
}
java中的排序(自定义数据排序)--使用Collections的sort方法的更多相关文章
- Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...
- JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson
java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...
- Java中final修饰的数据
目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...
- 怎么在java中创建一个自定义的collector
目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的c ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- java中多线程执行时,为何调用的是start()方法而不是run()方法
Thead类中start()方法和run()方法的区别 1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状 ...
- Java中list集合自定义排序-2022新项目
一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...
- javascript中对两个对象进行排序 和 java中的两个对象排序
javascript中的对象数组排序 一 定义一个对象数组 var text = [{"name":"张","age":24},{" ...
随机推荐
- sqlalchemy操作----多表关联
有二张表,一张作者表,一张书表,一个作者写多本书,一本书可以由多个作者写,与是通过新加一张关系表把他们联系起来 #!/usr/bin/env python # -*- coding: utf-8 -* ...
- 各种类型的Json格式化
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.R ...
- TStrings (TStringList)很有功能
用 TStrings的Object 保存类的方式,来保存除了Items以外的值. 今天才发现,原来,TStrings下,还有 Items,Values,Items.Names,Items.Values ...
- Tomcat实战-调优方案
Tomcat的默认配置,性能并不是最优的,可以通过优化tomcat以此来提高网站的并发能力.提高Tomcat的性能可以分为两个方向. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定 ...
- SpringSecurity的Filter执行顺序在源码中的体现
在网上看各种SpringSecurity教程时,都讲到了SpringSecurity的Filter顺序.但是一直不知道这个顺序在源码中是如何体现的.今天一步一步的查找,最终找到顺序是在FilterCo ...
- C++11--右值引用(移动语义)
/*################################################################## * 右值引用 (C++ 11) * 主要用于以下: * 1. ...
- C++进阶--解谜operator new/delete
//############################################################################ // 解谜operator new/del ...
- 【转】hive中UDF、UDAF和UDTF使用
原博文出自于: http://blog.csdn.net/liuj2511981/article/details/8523084 感谢! Hive进行UDF开发十分简单,此处所说UDF为Tempora ...
- C语言强化——字符串(2)
1.将包含字符数字的字符串分开,使得分开后的字符串前一部分是数字后一部分是字母.例 如"h1ell2o3" -> "123hello" #include& ...
- windows下GitHub的安装、配置以及项目的上传过程详细介绍
概要 本文主要介绍了在Win10系统中安装Github终端.如何配置安装好的Git终端以及如何利用Git终端将自己的项目上传到远程服务器中 操作必备 win10系统电脑一台.良好的互联网连接.GitH ...