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);*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值