[Java] 使用Comparator排序对象
package test.collections; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class Test03 {
public static void main(String[] args){
List<Song> songs = new ArrayList<Song>();
songs.add(new Song(2,"黄家驹","光辉岁月"));
songs.add(new Song(5,"刘德华","忘情水"));
songs.add(new Song(44,"张学友","吻别"));
songs.add(new Song(32,"刘德华","爱你一万年"));
songs.add(new Song(123,"黄家驹","冷雨夜"));
songs.add(new Song(133,"小虎队","爱")); //Collections.sort(songs);
//Collections.sort(songs,new SongNameCompare());
//Collections.sort(songs,new SongSongerCompare());
Collections.sort(songs,new SongSongIdCompare());
printList(songs);
}
public static void printList(Collection<Song> c){
for(Song song:c){
System.out.println(song);
}
}
}
class SongNameCompare implements Comparator<Song>{ @Override
public int compare(Song o1, Song o2) {
// TODO Auto-generated method stub
return o1.getName().compareTo(o2.getName());
}
}
class SongSongerCompare implements Comparator<Song>{
@Override
public int compare(Song o1, Song o2) {
// TODO Auto-generated method stub
return o1.getSonger().compareTo(o2.getSonger());
}
}
class SongSongIdCompare implements Comparator<Song>{
@Override
public int compare(Song o1, Song o2) {
// TODO Auto-generated method stub
return o1.id>o2.id?1:(o1.id<o2.id?-1:0);
}
}
class Song implements Comparable<Song>{
private String name;
private String songer;
int id;
public Song(int id,String songer,String name) {
super();
this.id = id;
this.name = name;
this.songer = songer;
} @Override
public String toString() {
return "Song [name=" + name + ", songer=" + songer + ", id=" + id + "]";
} public Song() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSonger() {
return songer;
}
public void setSonger(String songer) {
this.songer = songer;
}
public int compareTo(Song s){
//使用this.id 和s.id做比较,如果返回值>1,表示顺序排序,返回值是<1的数表示倒序
if(this.id>s.id){
return 1;
}else if(this.id<s.id){
return -1;
}else {
return 0;
} //根据歌名排序
//return this.getName().compareTo(s.getName());
//根据歌手名排序
//return this.getSonger().compareTo(s.getSonger());
}
}
[Java] 使用Comparator排序对象的更多相关文章
- java运用Comparator为对象排序
要排序的类需要实现Comparator接口,重写compare方法: user类及实现接口的内部类: package test; import java.util.Comparator; public ...
- [转] Java中Comparator进行对象排序
[From] https://blog.51cto.com/thinklili/2063244 Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id ...
- 【java】实现Interface java.lang.Comparable<T>接口的int compareTo(T o)方法实现对象数组或链表或集合的排序,和挽救式对象比较器Interface java.util.Comparator<T>
package 对象比较排序; import java.util.Arrays; class A implements Comparable<A>{ private String name ...
- Java 中Comparator 的使用,实现集合排序
目标:实现对Person 对象的年龄,从小到大排序 1.实现排序 package com.app; import java.util.ArrayList; import java.util.Colle ...
- Java中Comparable和Comparator实现对象比较
1.通过Comparable实现排序 package Comparable; import java.util.Arrays; public class ComparableUser implemen ...
- java 对list中对象按属性排序
实体对象类 --略 排序类----实现Comparator接口,重写compare方法 package com.tang.list; import java.util.Comparator; publ ...
- Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序
package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...
- Comparable与Comparator,java中的排序与比较
1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如s ...
- java list按照元素对象的指定多个字段属性进行排序
ListUtils.java---功能类 package com.enable.common.utils; import java.lang.reflect.Field;import java.tex ...
随机推荐
- OpenJudge计算概论-单词倒排【把句子内单词的顺序翻转】
/*================================================== 单词倒排 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,读入一段英文 ...
- hydra
转:http://www.cnblogs.com/patf/p/3142564.html 1.yum -y install openssl-devel pcre-devel ncpfs-devel p ...
- html之块级标签h系列,div
两个名词含义: 块级标签:内容再少也会占满整行 内联标签:有多少内容点多少地方 注:块级标签和内联不签不是绝对的,可以通过CSS作任意转换 1.h1-h6 :块级标签 请仅仅把标题标签用作标题文本,如 ...
- 在Eclipse中使用JUnit4进行单元测试
在Eclipse中使用JUnit4进行单元测试(初级篇) 在Eclipse中使用JUnit4进行单元测试(中级篇) 在Eclipse中使用JUnit4进行单元测试(高级篇)
- .NET分布式事务未提交造成6107错误或系统被挂起的问题分析定位
问题描述: 系统中多个功能不定期出现“Unable to get error message (6107) (0).”错误,即分布式事务超时,但报出错误的部分功能根本没有使用分布式事务. 原因分析: ...
- adb failed to start daemon 的解决办法
很多人遇到下面这个问题 * daemon not running. starting it now on port 5037 * ADB server didn't ACK<br>* fa ...
- Debian安装记录
Fedora着实让我伤心透了.前天和昨天搞了整整两天Fedora 20的安装,午睡也没有,晚上就睡了四个小时不到,几乎尝试了所有Fedora 20的桌面版本,全部出问题了!就因为我的笔记本显卡是ATI ...
- Angular学习(8)- 路由
示例: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 12&l ...
- linux常用方法
同步时间 ntpdate us.pool.ntp.org 查看http的并发请求数及其TCP连接状态 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in ...
- LVM---动态调整磁盘容量
LVM:logical volume manager(逻辑卷管理):LVM屏蔽了底层磁盘布局,方便于动态调整磁盘容量. 一.创建逻辑卷的步骤: 1)通过fdisk 工具将磁盘转换为linux分区 2) ...