Vector 多字段排序的Java实现
要求实现:
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实现的更多相关文章
- Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
Java 反射类:ReflexUtil public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexU ...
- java的list集合如何根据对象中的某个字段排序?
转自:http://blog.csdn.net/wangjuan_01/article/details/51351633 List集合按某个字段排序 package wjtest_01; import ...
- JAVA实现按列表中元素的时间字段排序
JAVA代码实现按列表中元素的时间字段排序 导语: 工作中遇到一个问题,调用第三方接口返回的数据没有按时间倒序排列,测试说要加,然后在网上找到一个解决办法,这里记录一下 需求: 如下图列表,按生日进行 ...
- ElasticSearch java API 按照某个字段排序
searchRequestBuilder.addSort("publish_time", SortOrder.DESC); 按照某个字段排序的话,hit.getScore()将会失 ...
- java实现按对象某个字段排序,排序字段和规则自定义
@SuppressWarnings({ "unchecked", "rawtypes" }) private <T> void sort(List& ...
- 在Java中使用Collections.sort 依据多个字段排序
一.如何使用Collections工具类进行排序 使用Collections工具类进行排序主要有两种方式: 1.对象实现Comparable接口,重写compareTo方法 /** * @author ...
- ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析
1.Text字段排序 场景:数据库中按照某个字段排序,sql只需写order by 字段名即可,如果es对一个text field进行排序,es中无法排序.因为文档入倒排索引表时,分词存入,es无法知 ...
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17
The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...
随机推荐
- nodejs环境使用jshint
一.概述jshint是检测JavaScript语法问题的工具,可以根据自己的需要配置检测规则. 二.安装npm install jshint -g一般全局安装就可以了,可以在任何目录下使用jshint ...
- Codeforces Round #228 (Div. 1) B. Fox and Minimal path 构造
B. Fox and Minimal path 题目连接: http://codeforces.com/contest/388/problem/B Description Fox Ciel wants ...
- Github好用的Python库使用学习日记
开源好用的Python库 Overview 所有内容基本源于下面的两个网站 awesome-python python3官方文档 you-get(命令行操作的媒体下载工具) you-get的git项目 ...
- C#高级编程9-第1章.NET体系结构
C#与NET的关系 C#编写的所有代码必须使用.NET FrameWork运行 C#是一种语言,但它本身不是.NET的一部分 C#一些特性,.NET不支持,.NET一些特性,C#不支持 公共语言运行库 ...
- systemtap 2.8 news
* What's new in version 2.8, 2015-06-17 - SystemTap has improved support for probing golang programs ...
- C++STL源代码学习(之slist篇)
///stl_slist.h ///list为双向循环链表,slist为单向链表.某些操作效率更高 ///slist是SGI额外提供的单向链表,不属于C++标准 struct _Slist_node_ ...
- WaitForSingleObject和CEvent用法
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将 ...
- Bootstrap 3之美04-自定义CSS、Theme、Package
本篇主要包括: ■ 自定义CSS■ 自定义Theme■ 自定义Package 自定义CSS 有时候,需要自定义或重写Bootstrap默认的CSS.→在css文件夹下创建一个site.css→假 ...
- [转载] 关于matlab GUI的一点心得
转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...
- 学习node js 之微信公众帐号接口开发 准备工作之三
app.js文件介绍,因为也是初学,以下的内容是个人的理解,有些不正确的地方请评论中指证:以注解的形式说明. //依赖组件[模块]导入 var express = require('express') ...