Java自定义比较器Comparator
1.数字排序
奇数在前,偶数在后。奇数降序,偶数升序。输入:“0,1,2,3,4,5,6,7,8,9” 输出:"9,7,5,3,1,0,2,4,6,8"
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/*
* @author sheepmu
*/
public class HWCompetition {
public static void main(String[] args){
String s="0,1,2,3,4,5,6,7,8,9";
System.out.println(getSort( s));//9 7 5 3 1 0 2 4 6 8
}
public static String getSort(String s){
List<Integer>list=new ArrayList<Integer>();
String[] ss=s.split(",");
for(int i=0;i<ss.length;i++){
list.add(Integer.parseInt(ss[i]+"") );
}
Collections.sort(list, new Comparator<Integer>(){ @Override
public int compare(Integer o1, Integer o2) {
int result=0;
if(o1%2==1&&o2%2==0){
result=o2%2- o1%2;// 结果为-才是前者在前
}
// if(o1%2==0&&o2%2==1){//和上面同样的作用
// result=o2%2- o1%2;//+
// }
if(o1%2==1&&o2%2==1){
result=o2-o1;//奇 降序
}
if(o1%2==0&&o2%2==0){
result= o1-o2;//偶 升序
}
return result;
}} );
StringBuffer sb=new StringBuffer();
for(int i:list){
sb.append(i+" ");
}
return sb.toString();
}
}
2.域名排序
规则:mail.sheepmu.com从 右往左 分别是 顶级域名,一级域名,二级域名。比较时从顶级 域名开始比较,按字典顺序比较,顶级域名相同再比较一级域名.....若某个域名是一个域名的子集,比如sheepmu.com,则 sheepmu.com 在mail.sheepmu.com之前。
输入:{mail.sheepmu.com, sheepmu.com, hah.abc.org, cc.baidu.cn}
输出:{sheepmu.com, mail.sheepmu.com, cc.baidu.cn, hah.abc.org}
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/*
* @author sheepmu
*/
public class HWCompetition {
public static void main(String[] args){
String[] ss={"mail.sheepmu.com","sheepmu.com","hah.abc.org","cc.baidu.cn","bat.haha.ab"};
System.out.println(getSort(ss));
}
public static String getSort(String[] ss){
List<String>list=new ArrayList<String>();
for(int i=0;i<ss.length;i++){
list.add(ss[i]);
}
Collections.sort(list, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
String[] ss1=o1.split("\\.");
String[] ss2=o2.split("\\.");
System.out.println(Arrays.toString(ss1)+" 和 "+Arrays.toString(ss2) );
int len=ss1.length<=ss2.length? ss1.length:ss2.length;//一定不要忘了等号,不然长度等的情况就悲剧了。循环比较时以短的为标准
int j=0;
for(;j<len;j++){
if(!ss1[ss1.length-1-j].equals(ss2[ss2.length-1-j])){
System.out.println(" -某段不等-------->" );
return ss1[ss1.length-1-j].compareTo(ss2[ss2.length-1-j]);
}
}
if(j==len){//循环完了
System.out.println(" -循环完了-------->"+len);
return o1.length()-o2.length();
}
return 0;
}} );
StringBuffer sb=new StringBuffer();
for(String i:list){
sb.append(i+" ");
}
return sb.toString();
}
}
Java自定义比较器Comparator的更多相关文章
- Java基础--比较器Comparator
Comparable接口和Comparator接口都是用来定义集合中的排序的,只是Comparable是在集合内部定义排序的实现,Comparator是在集合外部排序的实现. Comparable 的 ...
- SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...
- java集合框架之比较器Comparator、Comparable
参考http://how2j.cn/k/collection/collection-comparator-comparable/693.html Comparator 假设Hero有三个属性 name ...
- java中sort方法的自定义比较器写法(转载)
java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...
- Java中的equals方法和自定义比较器
Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...
- Java对象比较器对泛型List进行排序-Demo
针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以 ...
- java之比较器
java中的比较器有两种: 1.实体类实现Comparable接口,并实现其中的compareTo方法 2.在外部定义实现Comparator接口的比较器类,并实现其中的compare方法 Compa ...
- Java基础之comparator和comparable的区别以及使用
Java基础之comparator和comparable的区别以及使用 1: 区别: .Comparable类需要实现此接口,定义在类内,不利于扩展 2 .Comparator更灵活,可以随时自定义 ...
- 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
随机推荐
- hdu 4039 The Social Network
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4039 题目分类:字符串+bfs 题意:给一个人际关系图,根据关系图,给一个人推荐一个人认识 题目分析: ...
- RGB空间与HSV空间的相互转换(C++实现,修正网上大多数的代码错误)
void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V) { // r,g,b values a ...
- 14.3.4 Phantom Rows 幻影行
14.3.4 Phantom Rows 幻影行 所谓的幻读为发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 比如,如果一个SELECT被执行2次, 但是第2次返回的记录不是第一次返回的记录 ...
- 关于Oralce数据库优化的几点总结
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本 ...
- 持续集成环境Jenkins的搭建和使用
这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL. 持续集成总是跟敏捷开发什么的搞在一起,显得非常高 ...
- Android font-awesome 4.2 icons png(包含holo-light和holo-dark)
项目地址: https://github.com/bitjjj/android-font-awesome-4.2-icon-pngs
- poj3642 Charm Bracelet(0-1背包)
题目意思: 给出N,M,N表示有N个物品,M表示背包的容量.接着给出每一个物品的体积和价值,求背包可以装在的最大价值. http://poj.org/problem? id=3624 题目分析: o- ...
- Linux好书、经典书籍推荐
Linux好书.经典书籍推荐 思想篇 <Linux/Unix设计思想> 图书将Unix与Linux的原理有效地结合起来,总结了Unix/Linux软件开发中的原则.在保留了第1版中Unix ...
- 【译】ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据
原文:[译]ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据 在本节中,你将新建一个MoviesController 类,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. ...
- [置顶] 我的Android进阶之旅------>如何将Android源码导入Eclipse中来查看(非常实用)
Android源码下载完成的目录结构如如所示: step1:将.classpath文件拷贝到源代码的根目录 Android源码支持多种IDE,如果是针对APP层做开发的话,建议大家使用Eclipse开 ...