要排序的对象:

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; public class A implements Comparable<A>{
private String name; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(A o) {
String regex = "^\\w.*";
if (this.getName().matches(regex) || o.getName().matches(regex)) {
return this.getName().compareTo(o.getName());
} else {
return genPinYin(this.getName()).compareTo(genPinYin(o.getName()));
}
}
public static String genPinYin(String input) {
if (input == null || input.trim().equals("")) {
return "";
}
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
//多音字预先转换 这里可以处理一下多音字
char[] chars = input.trim().toCharArray();
StringBuilder output = new StringBuilder();
try {
for (char c : chars) {
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format);
output.append(temp[0]);
} else {
output.append(Character.toString(c));
}
}
} catch (Exception e) {
System.err.println("拼音转换出现未知异常:" + input);
}
return output.toString();
} }

  

排序实现:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Test { public static void main(String[] args) {
A a1 = new A(); A a2 = new A();
A a3 = new A(); A a4 = new A();
A a5 = new A(); A a6 = new A();
A a7 = new A(); A a8 = new A(); a1.setName("二维码"); a2.setName("回调");
a3.setName("接口"); a4.setName("服务窗");
a5.setName("123"); a6.setName("456");
a7.setName("zbc"); a8.setName("Abhj"); List<A> list = new ArrayList<A>();
list.add(a1); list.add(a2); list.add(a3); list.add(a4);
list.add(a5); list.add(a6); list.add(a7); list.add(a8); Collections.sort(list); for (A a : list) {
System.out.println(a.getName());
}
}
}

  

jar 包下载地址: http://pan.baidu.com/s/1sj9A2wl

利用PinYin4j 实现List中的对象按数字,字母, 汉字排序的更多相关文章

  1. 如何对List集合中的对象进行按某个属性排序

    我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序 当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法: 方法一 让l ...

  2. javascript 中关于对象转换数字值的一些特点

    下面是摘至<Javascript 高级程序设计第三版>里的一段话 是关于对象转换数字值的一些规则 "在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值.然后 ...

  3. 对List中每个对象元素按时间顺序排序

    需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. 代码实现: import java.text.SimpleDateFormat; import java.uti ...

  4. coding++:对List中每个对象元素按时间顺序排序

    需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. package com.tree.ztree_demo.orderby; import java.text.Si ...

  5. 【java】之对List中每个对象元素按时间顺序排序

    import java.text.SimpleDateFormat; import java.util.*; public class ListSort { public static class U ...

  6. 使用sort对数组中的对象的某个属性进行排序

    var data=[ { code: "10004", grade: "5.6", planQuantity: 220, }, { code: "10 ...

  7. python 利用split读取文本文件中每一行的数字并保存至相应文件夹

    import re from numpy import * def getStr(file_path,file_path1): fp = open(file_path, 'r') op = open( ...

  8. 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M ...

  9. 【学习笔记】Java中生成对象的5中方法

    概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...

随机推荐

  1. C# 控制连接超时

    首先连接超时分为三种,TCP Connection to SQL Server -> SqlConnection.Open -> SqlCommand.Execute先说第二种超时,sql ...

  2. Oracle通过sqlplus spool导入导出数据

    第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结) 第一部分 第一步 :这是我的导出数据的脚本call.sqlconn scott/tigerset echo offset ...

  3. HttpContext.Current.Cache在控制台下不工作

    说明: Cache 类不能在 ASP.NET 应用程序外使用.它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的.在其他类型的应用程序(如控制台应用程序或 Windows 窗体 ...

  4. oracle监听服务无法打开

    原因: 修改了主机名,但没有修改监听文件listener.ora里面的配置. 解决办法:修改HOST与主机名相同 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION ...

  5. awk 手册--【转载】

    1. 前言 有关本手册 : 这是一本awk学习指引,  其重点着重于 : l         awk 适于解决哪些问题 ? l         awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...

  6. java静态块

    一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的 静态代码块的初始化顺序  class Parent{ static String name = &q ...

  7. uploadify的用法与动态传参 提供demo下载

    ---恢复内容开始--- 官网:http://www.uploadify.com/   一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...

  8. Oracle-记录学习

    --select name,count(id) from work_test group by name having count(id)>1--select upper(name),t.*,l ...

  9. 多条件查询(php+mysql) 租房子例子

    <body> <?php //多条件 $tiaojian2= " 2=2 "; $attr2 = ""; //判断区域 if(!empty($ ...

  10. WDCP控制面板如何安装PDO_mysql组件

    http://osacar.iteye.com/blog/2098431 执行wget -c http://down.wdlinux.cn/in/pdo_mysql_ins.sh再执行chmod 75 ...