根据关键字对集合进行排序然后在按照拼音排序


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
冰的刘
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值