要求实现:

Vector 多字段排序,其中首元素不参与排序,第一二三字段升序,空排到前面。

//这里是Vector的元素定义
public class AVectorElement { private String sort_first_Field;
private String sort_second_Field;
private String sort_third_Field;
/**
* @return the sort_first_Field
*/
public String getSort_first_Field() {
return sort_first_Field;
}
/**
* @param sort_first_Field the sort_first_Field to set
*/
public void setSort_first_Field(String sort_first_Field) {
this.sort_first_Field = sort_first_Field;
}
/**
* @return the sort_second_Field
*/
public String getSort_second_Field() {
return sort_second_Field;
}
/**
* @param sort_second_Field the sort_second_Field to set
*/
public void setSort_second_Field(String sort_second_Field) {
this.sort_second_Field = sort_second_Field;
}
/**
* @return the sort_third_Field
*/
public String getSort_third_Field() {
return sort_third_Field;
}
/**
* @param sort_third_Field the sort_third_Field to set
*/
public void setSort_third_Field(String sort_third_Field) {
this.sort_third_Field = sort_third_Field;
}
}

排序实现

package jp.co.hitachi.jkk.zaimu.player.kr;

import java.util.Collections;
import java.util.Comparator;
import java.util.Vector; public class AVectorSort { /**
* @param args
*/
public static void main(String[] args) {
Vector<AVectorElement> vtElements = new Vector<AVectorElement>();
InstoVt(vtElements); // sort before print all elements
System.out.println("Sort Before:");
pfVtAllElement(vtElements); AVectorElement bkE = vtElements.firstElement();
vtElements.removeElementAt(0);
if (bkE == null) {
System.out.println("null!");
return;
}
Collections.sort(vtElements, new Comparator<AVectorElement>() { public int compare(AVectorElement ev1, AVectorElement ev2) { String[][] arrStr = new String[2][3]; arrStr[0][0] = convertNullToEmpty(ev1.getSort_first_Field());
arrStr[1][0] = convertNullToEmpty(ev2.getSort_first_Field()); arrStr[0][1] = convertNullToEmpty(ev1.getSort_second_Field());
arrStr[1][1] = convertNullToEmpty(ev2.getSort_second_Field()); arrStr[0][2] = convertNullToEmpty(ev1.getSort_third_Field());
arrStr[1][2] = convertNullToEmpty(ev2.getSort_third_Field()); if (arrStr[0][0].compareTo(arrStr[1][0]) > 0) {
return 1;
} else if (arrStr[0][0].compareTo(arrStr[1][0]) < 0) {
return -1; } else if (arrStr[0][1].compareTo(arrStr[1][1]) > 0) {
return 1;
} else if (arrStr[0][1].compareTo(arrStr[1][1]) < 0) {
return -1; } else if (arrStr[0][2].compareTo(arrStr[1][2]) > 0) {
return 1;
} else if (arrStr[0][2].compareTo(arrStr[1][2]) < 0) {
return -1;
} return 0;
}
});
// add first element backuped before sort
System.out.println("Sort After:");
vtElements.add(0, bkE);
// sort after ,print all elements
pfVtAllElement(vtElements);
} private static void InstoVt(Vector<AVectorElement> vtElements) {
AVectorElement e = null;
// first element is exclude
e = new AVectorElement();
e.setSort_first_Field("2029");
e.setSort_second_Field("1-070-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("2001");
e.setSort_second_Field("1-070-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("1001");
e.setSort_second_Field("1-070-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("1003");
e.setSort_second_Field("1-070-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("1002");
e.setSort_second_Field("1-080-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("1002");
e.setSort_second_Field("1-080-000");
e.setSort_third_Field("1-060-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("1002");
e.setSort_second_Field("1-070-000");
e.setSort_third_Field("1-070-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("");
e.setSort_second_Field("1-080-000");
e.setSort_third_Field("1-060-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("");
e.setSort_second_Field("");
e.setSort_third_Field("1-060-000");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("");
e.setSort_second_Field("");
e.setSort_third_Field("");
vtElements.add(e); e = new AVectorElement();
e.setSort_first_Field("");
e.setSort_second_Field("2-100-100");
e.setSort_third_Field("");
vtElements.add(e);
} private static void pfVtAllElement(Vector<AVectorElement> vtElements) {
for (AVectorElement e : vtElements) {
System.out.println("Field1: " + e.getSort_first_Field() + ", Field2:"
+ e.getSort_second_Field() + ", Field1:" + e.getSort_third_Field() + ".");
}
} private static String convertNullToEmpty(String aString) {
String ret = null;
try {
if (aString == null) {
return "";
}
return aString; } catch (Exception e) {
ret = null;
return ret;
}
}
}

排序结果:

Sort Before:
Field1: 2029, Field2:1-070-000, Field1:1-070-000.
Field1: 2001, Field2:1-070-000, Field1:1-070-000.
Field1: 1001, Field2:1-070-000, Field1:1-070-000.
Field1: 1003, Field2:1-070-000, Field1:1-070-000.
Field1: 1002, Field2:1-080-000, Field1:1-070-000.
Field1: 1002, Field2:1-080-000, Field1:1-060-000.
Field1: 1002, Field2:1-070-000, Field1:1-070-000.
Field1: , Field2:1-080-000, Field1:1-060-000.
Field1: , Field2:, Field1:1-060-000.
Field1: , Field2:, Field1:.
Field1: , Field2:2-100-100, Field1:.
Sort After:
Field1: 2029, Field2:1-070-000, Field1:1-070-000.(首元素不参与排序)
Field1: , Field2:, Field1:.
Field1: , Field2:, Field1:1-060-000.
Field1: , Field2:1-080-000, Field1:1-060-000.
Field1: , Field2:2-100-100, Field1:.
Field1: 1001, Field2:1-070-000, Field1:1-070-000.
Field1: 1002, Field2:1-070-000, Field1:1-070-000.
Field1: 1002, Field2:1-080-000, Field1:1-060-000.
Field1: 1002, Field2:1-080-000, Field1:1-070-000.
Field1: 1003, Field2:1-070-000, Field1:1-070-000.
Field1: 2001, Field2:1-070-000, Field1:1-070-000.

Vector 多字段排序的Java实现的更多相关文章

  1. Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)

    Java 反射类:ReflexUtil public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexU ...

  2. java的list集合如何根据对象中的某个字段排序?

    转自:http://blog.csdn.net/wangjuan_01/article/details/51351633 List集合按某个字段排序 package wjtest_01; import ...

  3. JAVA实现按列表中元素的时间字段排序

    JAVA代码实现按列表中元素的时间字段排序 导语: 工作中遇到一个问题,调用第三方接口返回的数据没有按时间倒序排列,测试说要加,然后在网上找到一个解决办法,这里记录一下 需求: 如下图列表,按生日进行 ...

  4. ElasticSearch java API 按照某个字段排序

    searchRequestBuilder.addSort("publish_time", SortOrder.DESC); 按照某个字段排序的话,hit.getScore()将会失 ...

  5. java实现按对象某个字段排序,排序字段和规则自定义

    @SuppressWarnings({ "unchecked", "rawtypes" }) private <T> void sort(List& ...

  6. 在Java中使用Collections.sort 依据多个字段排序

    一.如何使用Collections工具类进行排序 使用Collections工具类进行排序主要有两种方式: 1.对象实现Comparable接口,重写compareTo方法 /** * @author ...

  7. ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析

    1.Text字段排序 场景:数据库中按照某个字段排序,sql只需写order by 字段名即可,如果es对一个text field进行排序,es中无法排序.因为文档入倒排索引表时,分词存入,es无法知 ...

  8. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  9. 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17

    The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...

随机推荐

  1. loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计

    link 题意: A和B玩游戏,每轮A赢的概率为p.现在有T组询问,已知A赢了n轮输了m轮,没有平局,赢一局A得分+1,输一局得分-1,问A得分期望值? $n+m,T\leq 2.5\times 10 ...

  2. Apache 如何反向代理tomcat并且实现Session保持

    简介 LAMT=Linux+Apache+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下 ...

  3. 华为S5300系列交换机V100R006SPH019升级补丁

    S5300_V100R006SPH019.pat 附件: 链接:https://pan.baidu.com/s/1M1S5amGGViUieSp8lJ9psw  密码:sexx

  4. MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国

    MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国 CloudXNS

  5. 探究Linux下参数传递及查看和修改方法

    http://m.blog.csdn.net/blog/moonvs2010/11392959

  6. go语言 defer 高级

    go语言defer语句的用法 defer的语法 defer后面必须是函数调用语句,不能是其他语句,否则编译器会出错. package main import "log" func ...

  7. 引用jar版本错误

    [INFO] Scanning for projects... [ERROR] The build could not read 1 project -> [Help 1] [ERROR]    ...

  8. 3D屏保:魔方2.0版本

    一个三维魔方的屏保软件,可支持2级到72级的魔方.启动后魔方会自动旋转,并最终回到初始状态.有很多人问我这是怎么做到的,用的什么解魔方的算法,其实我自己根本就不会玩魔方,别人用技巧解魔方,我这程序中用 ...

  9. [17] 楼梯(Stairs)图形的生成算法

    感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices ( Yreal width, Yreal length, Yreal height, Yuint ...

  10. Informatica 常用组件Lookup之九 配置未连接的查找转换

    在映射中,未连接的查找转换与管道是分开的.您可以使用 :LKP 引用限定符编写表达式以调用其它转换中的查找.未连接查找的常用用法包括: 测试表达式中某个查找的结果 基于查找结果过滤行 基于查找的结果将 ...