String splitting and sorting (java simple recursive implementation)

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; 
    } 
}

Guess you like

Origin blog.csdn.net/zsah2011/article/details/90303769