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工具类的使用,自定义比较器
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
随机推荐
- C/C++头文件
C/C++头文件 #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> ...
- [Android学习笔记]捕获物理回退事件
物理回退按钮默认情况下是finish当前activity,返回上一个activity 当需要获取物理回退按钮的相应事件时候,可以这么做 步骤如下: 1.override当前activity的onKey ...
- 图像处理特征不变算子系列之Moravec算子(一)
论文转载请注明出处:http://blog.csdn.net/kezunhai 1977年,Moravec提出了兴趣点(Points of Interests)的概念,并应用于解决Stanford C ...
- C++编程命名规范
原地址:http://www.cnblogs.com/joinclear/archive/2013/02/21/2921422.html C++编程命名规范 0前言 根据多年工作经验和其它命名规范整理 ...
- UVA1455 - Kingdom(并查集 + 线段树)
UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum ...
- 深入理解Tomcat系列之一:系统架构(转)
前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似ht ...
- poj3414(bfs)
题目链接:http://poj.org/problem?id=3414 题意:给你两个容器 A B 问是否能够经过有限的步骤倒水,得到容量为 C 的水,输出最小的步数,同时输出每一步的操作.如果不能 ...
- 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...
- c#控制台应用程序-“进入指定日期检查出星期几”
这涉及一个算法: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7 在公式中d表示日期中的日数.m表示月份数.y表示年数. 注意:在公式 ...
- poj 3265 Problem Solving dp
这个题目容易让人误以为是贪心就可以解决了,但是细想一下很容易举出反例. dp[i][j]表示解决了i个问题,最后一个月解决的问题数目. #include <iostream> #inclu ...