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