JAVA搜索的词语按照关键字进行从左到右排序,相同顺序按拼音首字母排序

1、首先搜索出来的结果组装成List格式

List<String> names = cargoShipVOS.stream().map(CargoShipVO::getShipName).collect(Collectors.toList());

2、循环List中最大长度的词语

Integer length = 1;
        //循环最大长度
        for(String s:names){
    
    
            int tempLength = s.length();
            if(tempLength > length){
    
    
                length = tempLength;
            }
        }

3、根据最大词语长度循环,嵌套第一步中结果的List的循环,循环比对关键字在关键词出现的位置,放到新list中

   //循环最大长度创建list
        Map<String,List<String>> mapList = new HashMap();
        for(int i= 0 ;i< length; i++){
    
    
            Iterator<String> it = names.iterator();
            List<String> list = new ArrayList();
                while (it.hasNext()){
    
    
                    String name = it.next();
                    int index = getIndex(name,shipName);//调用方法 获取顺序
                    if(index == i){
    
    
                        list.add(name);
                        it.remove();
                    }
                }
                if(list.size() > 0){
    
    
                    mapList.put(String.valueOf(i),list);
                }
        }

//循环判断关键词在数组中出现的位置
public static int getIndex(String arr, String value) {
    
    
        char[] c = arr.toCharArray();
        if(value.length() == 1){
    
    
            for (int i = 0; i < c.length; i++) {
    
    
                if (String.valueOf(c[i]).equals(value)) {
    
    
                    return i;
                }
            }
        }else if(value.length() == 2){
    
    
            for (int i = 0; i < c.length-1; i++) {
    
    
                int j = i+1;
                if ((String.valueOf(c[i])+String.valueOf(c[j])).equals(value)) {
    
    
                    return i;
                }
            }
        }else if(value.length() == 3){
    
    
            for (int i = 0; i < c.length-2; i++) {
    
    
                int j = i+1;
                int k = j+1;
                if ((String.valueOf(c[i])+String.valueOf(c[j])+String.valueOf(c[k])).equals(value)) {
    
    
                    return i;
                }
            }
        }else {
    
    
            return 0;
        }
        return -1;//如果未找到返回-1
    }

4、根据JDK自带比对类Comparator分别对List中的结果进行排序,然后组装成需要的结果

//循环map 对map里面的list<String> 分别排序
 Comparator<Object> com= Collator.getInstance(java.util.Locale.CHINA);
        for(String key :mapList.keySet()){
    
    
            String[] strings = mapList.get(key).stream().toArray(String[]::new);
            Arrays.sort(strings,com);
            for(String s :strings){
    
    
                CargoShipVO vo = new CargoShipVO();
                vo.setShipId(map.get(s));
                vo.setShipName(s);
                vos.add(vo);
            }
        }

核心排序
Comparator com= Collator.getInstance(java.util.Locale.CHINA);

Arrays.sort(strings,com);*

猜你喜欢

转载自blog.csdn.net/hejunfei/article/details/104472192
今日推荐