一个List列表数据按照另外一个List列表顺序进行重排序

2020-03-22  本文已影响0人  传达室马大爷
一个List列表数据按照另外一个List列表顺序进行重排序
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.apache.commons.collections4.CollectionUtils;

public final class ListSortUtils {

    private ListSortUtils() {
        super();
    }

    public static <T> List<T> sortByList(List<Integer> sortFieldList,
                                         List<T> dataList,
                                         Function<T, Integer> function) {
        if (CollectionUtils.isEmpty(sortFieldList) || CollectionUtils.isEmpty(dataList)) {
            return dataList;
        }
        int maxSize = sortFieldList.size() + dataList.size() + 1;
        Map<Integer, Integer> sortIndexMap = new HashMap<>();
        for (int sortField : sortFieldList) {
            sortIndexMap.put(sortField, maxSize--);
        }
        Map<Integer, T> resultMap = new TreeMap<>(Comparator.reverseOrder());
        for (T data : dataList) {
            Integer fieldName = function.apply(data);
            int index = sortIndexMap.getOrDefault(fieldName, 0);
            if (index > 0) {
                resultMap.put(index, data);
            } else {
                resultMap.put(maxSize--, data);
            }
        }
        return resultMap.values().stream().collect(Collectors.toList());
    }

    public static <T> void swap(List<T> list, int index1, int index2) {
        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        if (index1 >= list.size() || index2 >= list.size()) {
            return;
        }
        T data = list.get(index1);
        list.set(index1, list.get(index2));
        list.set(index2, data);
    }

}

git地址:https://github.com/shawntime/shawn-common-utils/blob/master/src/main/java/com/shawntime/common/utils/ListSortUtils.java

上一篇 下一篇

猜你喜欢

热点阅读