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工具类的使用,自定义比较器
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
随机推荐
- WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
原文:WebBrowser控件禁用超链接转向.脚本错误提示.默认右键菜单和快捷键 WebBrowser控件禁用超链接转向.脚本错误提示.默认右键菜单和快捷键从 VS2005开始,VS自带的 WebBr ...
- Oracle的dbms_output包的put()和put_line()的区别只是有没有回车换行吗?(转)
答案是否 除了自动添加回车换行外,还有就是缓冲区最大容量的问题!! 无论如何设置serveroutput size,10g里 put() 最多只能输出 32767 个byte 而 put_line() ...
- sql中的CHARINDEX和暂时表
update #temp set #temp.Recycle=case when UnionA.num>0 then 1 else 0 end from (select GradeID,sum( ...
- 文件下载:"Content-disposition","attachment; filename=中文名>>>解决方案
文件下载时常会出现如下问题: response.setHeader("Content-disposition","attachment; filename="+ ...
- JSON支持什么对象/类型?
原文:JSON支持什么对象/类型? 当一个面试官问你: JSON都支持什么对象/类型?你怎么回答? 也许他的本意是下面这个答案: JSON格式支持的数据类型有以下: 类型 描述 Number 在Jav ...
- 分享3一个博客HTML5模板
1.材类别:半透明 博客html模板 个人博客 半透明html5博客主题,半透明,博客,博客html模板,个人博客,html5,灰色,半透明html5博客主题是一款适合用于个人博客主题,风格非常不错. ...
- 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别
一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...
- hdu4035(概率dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结 ...
- Eclipse中的Maven项目报Unbound classpath variable错误
今天更新了最新版的Eclipse luna 4.4版本号,svn更新了项目后,系统一直报错,经查看在Problems窗体中发现一堆错误.提演示样例如以下: Unbound classpath ...
- nginx 301跳转到带www域名方法rewrite(转)
首先一.得在你的域名管理里面定义 test.com和www.test.com指向你的主机ip地址,我们可以使用nslookup命令测试:直接输入 nslookup test.com和nslookup ...