字符串分割排序(java简单的递归实现)

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("输出:"+ strings.toString());
    }

    /**
     * 排序方法
     * @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;
        //方法调用
        List<String> sortList = getSortList(list, 0, length - 1);

        return sortList;

    }

    /**
     * 简单的递归实现排序
     * @param list
     * @param num
     * @param length
     * @return
     */
    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);
            }
        }

        //遍历map,取得value,添加到新的list
        List<String> tempList = Lists.newArrayList(listMap.keySet());
        Collections.sort(tempList);
//        Collections.reverse(tempList); 倒序
        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){
                    // 每一个map中的value重新进行排序,直到倒数第二列
                    strings = getSortList(strings, num + 1, length);
                }
                //value 已经排好序,添加到list
                lists.addAll(strings);
            }
        }

        return lists;
    }

    //获取以||分割的第num个的值
    private static String getKey(String str,Integer num){
        if(str!=null&&str.length()>0){
            String[] split = str.split("\\|\\|");
            return split[num];
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔下天地宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值