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. **快速排序**:采用分治策略,选择一个“基准”元素,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。...
22. **排序原则**:中文按拼音字母排序,数字从小到大,英文不分大小写排序,空字段在升序排序时排在前面。 23. **字段固定**:要固定某个字段,可以使用“冻结”功能使其在滚动时保持可见。 24. **字符串排序**:...
在编程中,这通常涉及到数组或集合的排序操作。 2. **模糊查询**:用户可以输入部分城市名进行搜索,实现模糊查询。这通常需要使用到字符串匹配算法,如Trie树、Levenshtein距离或者正则表达式。在前端,可以使用...
2. 查询逻辑:在用户输入查询关键字后,将关键字转换为首字母,然后在索引字段中进行匹配查找。 示例代码: ```java public List<String> searchByFirstLetter(String keyword) { keyword = PinyinHelper....
5. **拼音模糊查询**:对于中文,可以利用拼音库将汉字转换为拼音,然后进行模糊匹配,适用于用户可能输入拼音的情况。 6. **编辑距离扩展**:如Soundex和Metaphone算法,它们根据英文单词的发音规则对单词编码,...
6. 汉字排序:计算机中的汉字并非按拼音排序,而是依据汉字的Unicode编码或GBK编码。 7. 数组排序:Arrays.sort()方法可以对数组进行升序排序,对于整型数组,排序后的结果会从小到大排列。 8. E-mail地址:电子...
10. 排序规则:排序时,数字按大小,英文字母按26个字母顺序,中文按汉语拼音,但备注、超链接或OLE对象字段无法直接排序。 11. 筛选方式:按选定内容筛选、按窗体筛选和内容排除筛选是简单的筛选方式,而高级筛选/...
智能排序:自动记忆输入过的搜索关键字,并根据搜索历史对结果排序,因此使用越多,结果越准确。 键盘化操作:几乎所有操作都可通过键盘完成,例如选择文件后按右方向键将出现操作菜单,此时可像定位文件一样定位...
实例049 使用快速排序法对一维数组进行排序 实例050 使用sort方法对数组进行快速排序 实例051 按指定条件在数组中检索元素 实例052 反转数组中元素的顺序 实例053 使用希尔排序法对一维数组进行排序 实例054 向班级...
实例049 使用快速排序法对一维数组进行排序 79 实例050 使用sort方法对数组进行快速排序 81 实例051 按指定条件在数组中检索元素 82 实例052 反转数组中元素的顺序 84 实例053 使用希尔排序法对一维数组进行排序 85 ...
20. 汉字排序:计算机中汉字的排序通常按字典顺序,而非拼音顺序。 21. Java数组与索引:Java数组的元素下标从0开始,下标可以是整数或整型表达式。 22. 窗体操作:窗体的Load事件在加载窗体时触发,Enabled属性为...
- 选择合适的集合类:根据需求选择ArrayList、LinkedList、HashSet、HashMap等。 - 避免过度优化:在保证性能的同时,要考虑代码的可读性和可维护性。 - 掌握常用排序和查找算法,如快速排序、归并排序、二分查找...
计算机内部的排序规则不同于传统的拼音排序。 **详细解释:** - **ASCII 码排序**:计算机内部是基于 ASCII 码值进行排序的。 ### 15. 文本框的最大长度属性 **知识点概述:** 在图形用户界面中,文本框的 `...