package com.common.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.common.util.StringHelper;
/**
* 2011-03-18
* 对一个集合进行排序,首先按照关键字的出现顺序排序,然后在按照拼音排序
* @author Bing
*
*/
public class KeyWordComparator {
Comparator<SearchResultVo> c=null;
public KeyWordComparator(Comparator<SearchResultVo> c)
{
this.c=c;
}
public List<SearchResultVo> compare(List<SearchResultVo> vos,String key,int k) {
List<SearchResultVo> temp=new ArrayList<SearchResultVo>();
String key_pinyin=StringHelper.getPinyin(key).toLowerCase();
int keylength=key_pinyin.length();
List<SearchResultVo> result=new ArrayList<SearchResultVo>();
boolean existkey=false;
boolean leftstrexistkey=false;
for(int i=vos.size()-1;i>=0;i--)
{
SearchResultVo vo=vos.get(i);
String fullname=StringHelper.getPinyin(vo.getFullname()).toLowerCase();
if(k+keylength<=fullname.length())
{
String name=fullname.substring(k, k+keylength);
if(key_pinyin.equals(name))
{
existkey=true;
temp.add(vo);
vos.remove(i);
}
String leftstr=fullname.substring(k+1, fullname.length());
if(leftstr.toLowerCase().indexOf(key_pinyin) != -1)
{
leftstrexistkey=true;
}
}
}
Collections.sort(temp, c);
result.addAll(temp);
if((existkey==false) && (leftstrexistkey==false))
{
result.addAll(vos);
return result;
}
k=k+1;
result.addAll(compare(vos,key,k));
return result;
}
}
测试方法:
SearchResultVo v1=new SearchResultVo();
SearchResultVo v2=new SearchResultVo();
SearchResultVo v3=new SearchResultVo();
SearchResultVo v4=new SearchResultVo();
SearchResultVo v5=new SearchResultVo();
SearchResultVo v6=new SearchResultVo();
SearchResultVo v7=new SearchResultVo();
SearchResultVo v8=new SearchResultVo();
SearchResultVo v9=new SearchResultVo();
v1.setFullname("刘冰");
v2.setFullname("刘伟");
v3.setFullname("冰刘");
v4.setFullname("刘建");
v5.setFullname("冰刘e");
v6.setFullname("冰刘a");
v7.setFullname("刘志鹏");
v8.setFullname("冰刘");
v9.setFullname("冰的刘");
// v1.setFullname("张凤连");
// v2.setFullname("张月");
// v3.setFullname("张大雷");
// v4.setFullname("张月");
// v5.setFullname("张楠");
// v6.setFullname("张棋");
List<SearchResultVo> list=new ArrayList<SearchResultVo>();
list.add(v1);list.add(v2);list.add(v3);list.add(v4);list.add(v5);list.add(v6);list.add(v7);list.add(v8);list.add(v9);
KeyWordComparator k=new KeyWordComparator(new SimpleSearchComparator());
list=k.compare(list, "刘", 0);
//list=k.compare(list, "liu", 0);
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i).getFullname());
}
结果:
刘冰
刘建
刘伟
刘志鹏
冰刘
冰刘
冰刘a
冰刘e
冰的刘
分享到:
相关推荐
实例101 使用快速排序法对一维数组进行排序 119 实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序法对一维数组进行排序 122 实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素...
智能排序:自动记忆输入过的搜索关键字,并根据搜索历史对结果排序,因此使用越多,结果越准确。 键盘化操作:几乎所有操作都可通过键盘完成,例如选择文件后按右方向键将出现操作菜单,此时可像定位文件一样定位...
实例049 使用快速排序法对一维数组进行排序 实例050 使用sort方法对数组进行快速排序 实例051 按指定条件在数组中检索元素 实例052 反转数组中元素的顺序 实例053 使用希尔排序法对一维数组进行排序 实例054 向班级...
实例049 使用快速排序法对一维数组进行排序 79 实例050 使用sort方法对数组进行快速排序 81 实例051 按指定条件在数组中检索元素 82 实例052 反转数组中元素的顺序 84 实例053 使用希尔排序法对一维数组进行排序 85 ...
右键集合了大多数常用功能,不常用的在"工具"中; 5.主要的特色功能︰ 00) 语音朗读文本 (注:[自定义欢迎词]中可更改欢迎语音; XP下初始只有一个缺省语音引擎,为英文MSSam; 朗读中文需要TTS简体中文语音库,...