package com.example.test; import org.assertj.core.util.Lists; import org.json.JSONObject; import java.util.*; import static org.assertj.core.util.IterableUtil.iterator; public class SortTest { public static void main(String[] args) { //梯次排序 第一列是顺序a,b,c,d; 第二列也是a,b,c,d List<String> list = new ArrayList<>(); list.add("b||d||a"); list.add("a||c||d"); list.add("a||b||c"); list.add("a||c||b"); list.add("b||c||d"); list.add("a||b||d"); list.add("d||c||a"); list.add("b||c||a"); List<String> strings = sortStr(list); System.out.println("Output:"+ strings.toString()); * @return } /** * Sorting method * @param list * @return */ private static List<String> sortStr(List<String> list){ if(list.size()<=1){ return list; } String strings = list.get(0); Integer length = strings.split("\\|\\|").length; //Method call List<String> sortList = getSortList(list, 0, length-1); return sortList; } /** * Simple recursive sorting * @param list * @param num * @param length */ public static List<String> getSortList(List<String> list,Integer num,Integer length){ //list 封装成Map,根据num的字符串为key Map<String,List<String>> listMap = new LinkedHashMap<>(); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ String str = iterator.next(); String key = getKey(str, num); List<String> strings1 = listMap.get(key); if(strings1!=null&&strings1.size()>0){ strings1.add(str); } else { List<String> tempList = new ArrayList<>(); tempList.add(str); listMap.put(key,tempList); } } //Traverse the map, get the value, and add it to the new list List<String> tempList = Lists.newArrayList(listMap.keySet()); Collections.sort(tempList); // Collections .reverse(tempList); Reverse Iterator<String> stringIterator =tempList.iterator(); List<String> lists = new ArrayList<>(); while (stringIterator.hasNext()){ String next = stringIterator.next(); List<String> strings = listMap.get(next); if(strings!=null&&strings.size()>0){ if(num <length){ // The values in each map are reordered until the second to last Column strings = getSortList(strings, num + 1, length); } //value has been sorted and added to the list lists.addAll(strings); } } return lists; numth } //Get the value of num divided by || private static String getKey(String str,Integer num){ if(str!=null&&str.length()>0){ String[] split = str.split(" \\|\\|"); return split[num]; } return null; } }
String splitting and sorting (java simple recursive implementation)
Guess you like
Origin blog.csdn.net/zsah2011/article/details/90303769
Recommended
Ranking