美文网首页
一个List列表数据按照另外一个List列表顺序进行重排序

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

作者: 传达室马大爷 | 来源:发表于2020-03-22 14:50 被阅读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

相关文章

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

    一个List列表数据按照另外一个List列表顺序进行重排序 git地址:https://github.com/sh...

  • Redis 使用记录(四)

    List (列表) List 是一个简单的 String 列表,按照插入顺序排序。可以添加一个元素到 List 的...

  • redis的LIst列表

    List列表(双向链表结构 ) Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部...

  • redis 列表(list)使用场景

    List 列表 即队列。Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)...

  • sort(List list)

    sort(List list) 根据元素的自然顺序 对指定列表按升序进行排序。List可以是ArrayLis...

  • list类型

    list类型 列表的元素类型为string 按照插⼊顺序排序 增加 在左侧插⼊数据 lpush key value...

  • Redis 数据结构之list类型

    list类型 列表的元素类型为string 按照插⼊顺序排序 增加 在左侧插⼊数据 lpush key value...

  • 深入Redis的List类型的应用

    Redis的List Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或...

  • Android图层列表layer-list

    概念 layer-list 是图层列表,原理是列表中的每个可绘制对象均按照列表顺序绘制,列表中的最后一个可绘制对象...

  • Flutter 中List<dynamic>中数据排

    在我们做App中列表时少不了进行数据排序,比如城市列表等等,再Flutter中List是怎么排序的呢,Flutte...

网友评论

      本文标题:一个List列表数据按照另外一个List列表顺序进行重排序

      本文链接:https://www.haomeiwen.com/subject/dzhvnctx.html