`
help
  • 浏览: 22098 次
  • 性别: 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
冰的刘
分享到:
评论

相关推荐

    计算机知识

    4. **快速排序**:采用分治策略,选择一个“基准”元素,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。...

    ACCESS上机操作模拟试卷1

    22. **排序原则**:中文按拼音字母排序,数字从小到大,英文不分大小写排序,空字段在升序排序时排在前面。 23. **字段固定**:要固定某个字段,可以使用“冻结”功能使其在滚动时保持可见。 24. **字符串排序**:...

    获取所有城市列表

    在编程中,这通常涉及到数组或集合的排序操作。 2. **模糊查询**:用户可以输入部分城市名进行搜索,实现模糊查询。这通常需要使用到字符串匹配算法,如Trie树、Levenshtein距离或者正则表达式。在前端,可以使用...

    通过首字母查询pinyin4j-2.5.0 jar包及使用方法

    2. 查询逻辑:在用户输入查询关键字后,将关键字转换为首字母,然后在索引字段中进行匹配查找。 示例代码: ```java public List&lt;String&gt; searchByFirstLetter(String keyword) { keyword = PinyinHelper....

    模糊查询源代码案例2

    5. **拼音模糊查询**:对于中文,可以利用拼音库将汉字转换为拼音,然后进行模糊匹配,适用于用户可能输入拼音的情况。 6. **编辑距离扩展**:如Soundex和Metaphone算法,它们根据英文单词的发音规则对单词编码,...

    2021-2022计算机二级等级考试试题及答案No.17898.docx

    6. 汉字排序:计算机中的汉字并非按拼音排序,而是依据汉字的Unicode编码或GBK编码。 7. 数组排序:Arrays.sort()方法可以对数组进行升序排序,对于整型数组,排序后的结果会从小到大排列。 8. E-mail地址:电子...

    河南省对口升学计算机专业课第二次月考试题.pdf

    10. 排序规则:排序时,数字按大小,英文字母按26个字母顺序,中文按汉语拼音,但备注、超链接或OLE对象字段无法直接排序。 11. 筛选方式:按选定内容筛选、按窗体筛选和内容排除筛选是简单的筛选方式,而高级筛选/...

    文件浏览增强工具 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 ...

    2021-2022计算机二级等级考试试题及答案No.5129.docx

    20. 汉字排序:计算机中汉字的排序通常按字典顺序,而非拼音顺序。 21. Java数组与索引:Java数组的元素下标从0开始,下标可以是整数或整型表达式。 22. 窗体操作:窗体的Load事件在加载窗体时触发,Enabled属性为...

    阿里巴巴Java开发手册(终极版)

    - 选择合适的集合类:根据需求选择ArrayList、LinkedList、HashSet、HashMap等。 - 避免过度优化:在保证性能的同时,要考虑代码的可读性和可维护性。 - 掌握常用排序和查找算法,如快速排序、归并排序、二分查找...

    2021-2022计算机二级等级考试试题及答案No.17363.docx

    计算机内部的排序规则不同于传统的拼音排序。 **详细解释:** - **ASCII 码排序**:计算机内部是基于 ASCII 码值进行排序的。 ### 15. 文本框的最大长度属性 **知识点概述:** 在图形用户界面中,文本框的 `...

Global site tag (gtag.js) - Google Analytics