Java自定义比较器Comparator

时间:2023-02-12 22:29:29

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的更多相关文章

  1. Java基础--比较器Comparator

    Comparable接口和Comparator接口都是用来定义集合中的排序的,只是Comparable是在集合内部定义排序的实现,Comparator是在集合外部排序的实现. Comparable 的 ...

  2. SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器&lpar;转&rpar;

    与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...

  3. java集合框架之比较器Comparator、Comparable

    参考http://how2j.cn/k/collection/collection-comparator-comparable/693.html Comparator 假设Hero有三个属性 name ...

  4. java中sort方法的自定义比较器写法(转载)

    java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...

  5. Java中的equals方法和自定义比较器

    Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...

  6. 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 以 ...

  7. java之比较器

    java中的比较器有两种: 1.实体类实现Comparable接口,并实现其中的compareTo方法 2.在外部定义实现Comparator接口的比较器类,并实现其中的compare方法 Compa ...

  8. Java基础之comparator和comparable的区别以及使用

    Java基础之comparator和comparable的区别以及使用 1: 区别:  .Comparable类需要实现此接口,定义在类内,不利于扩展 2 .Comparator更灵活,可以随时自定义 ...

  9. 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

随机推荐

  1. struts-validate&period;xml配置详解demo

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC &quo ...

  2. 将C&num;datagridview控件的数据导出到Excel中

    1.添加引用Microsoft.Office.Interop.Excel. 2.程序代码引用using Excel = Microsoft.Office.Interop.Excel; 3.控件事件代码 ...

  3. mac升级后提示pod&colon; command not found

    问题:升级mac到10.12使用pod,提示pod: command not found   解决方法:sudo gem install -n /usr/local/bin cocoapods   如 ...

  4. Xcode6&period;1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。

    http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加x ...

  5. SPFA 原理剖析代码实现分析比较

    算法简介 SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法流程 算法大致流程是用一个队列来进行维护. ...

  6. mysql 内外链接

    外联结:分为外左联结和外右联结. 左联结A.B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录 ...

  7. &lbrack;ES6&rsqb; 16&period; Object Enhancements

    Define object: var color = "blue"; var speed = 120; var car = {color, speed}; console.log( ...

  8. 一次GC问题定位

    同事有段代码执行时间过长,需要进行优化, Hashmultimap<Int,Bean> map = ...; for (400w*96) { // 计算过程 Bean = doComput ...

  9. UITextfield的一些属性

    //设置左视图 不用设置frame UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quo ...

  10. Javascript几种跨域方式总结

    在客户端编程语言中如javascript,同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法.只有当两个域具有相同的协议,相同的主机,相同的端口时,我们就认定 ...