集合排序-实现既定顺序排序

背景

        项目中统计类目的列表数据要按照指定的规则进行排序.统计的数据集是按照行业内指定的区域进行数据分组计算,因此相当于就是按照给定集合的指定属性字段进行指定顺序的排序.特此纪要!

问题

        如何为集合进行指定顺序的排序?

说明

        由于集合分组的依据的数据量是有限的,要按照给定的顺序进行排序,最快的速度就是按照你想要的顺序重新组装一次集合得到你想要的结果. 这里使用FIFO的队列进行解决这个问题.

解决

        为了更快的了解这种方案, 下面是平移的一组case.

public class CodeOrder {

    // 指定排序顺序的目标队列.
    static final BlockingQueue<String> targetQueue = new LinkedBlockingDeque<String>(){{
    add("苏州市市");
    add("昆山");
    add("常熟");
    add("张家港");
    add("太仓");
    add("吴江");
    add("吴中");
    add("相城");
    add("苏州工业园区");
    add("苏州高新区");
    add("姑苏区");
    add("张家港保税区");
    }};

    public static void main(String[] args) {

        // 待排序的数据集.
        List<String> list = new ArrayList<>();
        list.add("苏州市市场监督管理局");
        list.add("苏州市吴中区市场监督管理局");
        list.add("苏州市相城区市场监督管理局");
        list.add("苏州高新区(虎丘区)市场监督管理局");
        list.add("常熟市市场监督管理局");
        list.add("张家港市市场监督管理局");
        list.add("昆山市市场监督管理局");
        list.add("苏州市吴江区市场监督管理局");
        list.add("太仓市市场监督管理局");
        list.add("江苏省张家港保税区市场监督管理局");
        list.add("苏州工业园区市场监督管理局");
        list.add("苏州市姑苏区市场监督管理局苏州国家历史文化名城保护区市场监督管理局");

        // 重排序后的数据容器.
        List<String> data = new LinkedList<>();

        // 利用FIFO特性的队列进行数据重排序.
        Iterator<String> iterator = targetQueue.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            Optional<String> first = list.stream().filter(f -> f.contains(next)).findFirst();
            if (first.isPresent()) {
                data.add(first.get());
            }
        }
        // 排序后的数据集.
        System.out.println(data);

    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值