`
help
  • 浏览: 21659 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

阅读更多
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
冰的刘
分享到:
评论

相关推荐

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例101 使用快速排序法对一维数组进行排序 119 实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序法对一维数组进行排序 122 实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素...

    文件浏览增强工具 Listary Pro 5.00 Build 2843.zip

    智能排序:自动记忆输入过的搜索关键字,并根据搜索历史对结果排序,因此使用越多,结果越准确。 键盘化操作:几乎所有操作都可通过键盘完成,例如选择文件后按右方向键将出现操作菜单,此时可像定位文件一样定位...

    明日科技C#开发入门及项目实战

    实例049 使用快速排序法对一维数组进行排序 实例050 使用sort方法对数组进行快速排序 实例051 按指定条件在数组中检索元素 实例052 反转数组中元素的顺序 实例053 使用希尔排序法对一维数组进行排序 实例054 向班级...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例049 使用快速排序法对一维数组进行排序 79 实例050 使用sort方法对数组进行快速排序 81 实例051 按指定条件在数组中检索元素 82 实例052 反转数组中元素的顺序 84 实例053 使用希尔排序法对一维数组进行排序 85 ...

    SuperNotepad

    右键集合了大多数常用功能,不常用的在"工具"中; 5.主要的特色功能︰ 00) 语音朗读文本 (注:[自定义欢迎词]中可更改欢迎语音; XP下初始只有一个缺省语音引擎,为英文MSSam; 朗读中文需要TTS简体中文语音库,...

Global site tag (gtag.js) - Google Analytics