首页 > 其他分享 >邮编分段,连续的数字进行分段

邮编分段,连续的数字进行分段

时间:2024-04-07 09:00:28浏览次数:16  
标签:分段 邮编 get start 108 String 110 sored 数字

记录一个需求

有一批邮编数据 类似于100,101,102,105,108,110
我希望得到这样的结果,如果是连续的我只需要一个其实和结尾 例如上面的数据 我希望得到 100-102   105-105 108-108  110-110

下面是我的实现方式

public List<PostCodeRanges> postRanges(List<String> postCode) {
        //剔除重复的数据
        HashSet<String> setStrings = new HashSet<>(postCode);

        //转为数字
        List<Integer> integerList = setStrings.stream().map(Integer::parseInt).collect(Collectors.toList());

        //排序
        List<Integer> sored = integerList.stream().sorted(Comparator.comparing(item -> item)).collect(Collectors.toList());

        int start = 0;
        List<PostCodeRanges> postCodeRangesList = new ArrayList<>();
        for (int i = 1; i < sored.size(); i++) {
            int current = sored.get(i);
            int last = sored.get(i - 1);
            if (current - last > 1) {
                Integer s = sored.get(start);
                Integer e = sored.get(i - 1);
                postCodeRangesList.add(new PostCodeRanges(String.valueOf(s), String.valueOf(e)));
                start = i;
            }
            if (i == sored.size() - 1) {
                Integer s = sored.get(start);
                Integer e = sored.get(i);
                postCodeRangesList.add(new PostCodeRanges(String.valueOf(s), String.valueOf(e)));
            }
        }
        return postCodeRangesList;
    }
结果对象
 @Data
@AllArgsConstructor
public class PostCodeRanges {
    /**
     * 开始
     */
    private String start;

    /**
     * 结尾
     */
    private String end;
}

 

展示结果

输入:
[
    "100",
    "101",
    "102",
    "105",
    "108",
    "110"
]


输出:
[
        {
            "start": "100",
            "end": "102"
        },
        {
            "start": "105",
            "end": "105"
        },
        {
            "start": "108",
            "end": "108"
        },
        {
            "start": "110",
            "end": "110"
        }
    ]

 

标签:分段,邮编,get,start,108,String,110,sored,数字
From: https://www.cnblogs.com/loveCrane/p/18113192

相关文章

  • 如何进行快速求解大数是否是11的倍数证明(如果奇数位数字和与偶数位数字和的差是11的倍
    当一个数的奇数位上数字和与偶数位上数字和的差是11的倍数时,这个数就是11的倍数。这个性质可以通过数学归纳法和模运算的性质来证明。观察模运算的性质首先,观察到对于任意正整数k,10^k对11取模的结果是循环的:......
  • 数字图像处理、计算机图形学相关的名词解释和解答题(二)
    声明1.本系列的主要内容主要是罗列《数字图像处理》和《计算机图形学》这两门课程中涉及到的一些名词解释和简答题。2.其中名词解释不仅仅是解释这个名词,还包括其结果、原理、类型或优缺点等方面的解释,以保证答题时字数足够。可以根据自身情况进行增添。3.适合即将期末考......
  • 实景三维在数字乡村建设中的重要作用
    随着科技的飞速发展,数字乡村建设已成为推动乡村振兴、实现农村现代化的重要途径。实景三维技术作为数字乡村建设的重要支撑,正逐渐在各个领域发挥着不可或缺的作用。本文将从实景三维技术在数字乡村中的应用场景、优势及未来展望等方面进行探讨,以期为数字乡村建设提供有益的参考......
  • 2024年数字IC秋招-联发科-数字IC工程师(设计方向、验证方向、整合方向)-笔试题
    文章目录前言一、简答题1、阅读下列perl脚本,并完成任务2、使用二选一的MUX实现8选1电路,使得输入输出耗时最短,并指出最短路径需要经过几个mux3、DFT的全程,基本方法和对应的测试对象4、智力题5、自己熟悉的项目,完成的任务6、遇到的项目挑战,如何解决,有什么成果7......
  • 2024年数字IC秋招-大疆-数字芯片开发工程师-笔试题
    文章目录前言一、选择题(有单选和多选)1、以下会影响芯片工作频率的违例是?2、下列哪些手段能降低芯片动态功耗?3、关于锁存器(latch)和触发器(flip-flop),以下说法正确的是4、关于XILINXZYNQ器件,说法不正确的是:5、以下哪些电路结构在高速serdes中比较常见?6、......
  • 17.C结构化程序 猜数字游戏
    ////猜数字游戏#include<stdio.h>#include<stdlib.h>#include<time.h>//产生一个0~RAND_MAX之间的伪随机数//intrand=rand();错误//rand()函数是标准库中的一个函数,用于生成一个伪随机数//而rand是一个变量名,当你使用intrand=...;时//你实际上是在尝试定义......
  • 190页大型制造企业IT信息化应用集成及数字化平台建设方案(PPT)
    原文《大型制造企业IT信息化应用集成及数字化平台建设方案》PPT格式,共190页​制造企业信息化系统应用集成>总体框架总体框架制造企业信息化目标与规划>总览图移动、知识、协同、集成、智能、安全总览图制造企业信息化>集成平台整体规划lIT资源一体化l避免信息孤......
  • 【LeetCode刷题记录】简单篇-13-罗马数字转整数
    【题目描述】 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字 2 写做 II ,即为两个并列的1。12 ......
  • LeetCode 13. 罗马数字转整数
    解题思路通过样例我们可以知道,将目标对应值和下一个目标对应值进行比较,如果小于,则sum=sum+目标对应值,如果大于,则sum=sum-目标对应值。最终的sum就是正确答案。相关代码classSolution{public:intromanToInt(strings){unordered_map<char,int>a;......
  • 基于深度学习的手写数字和符号识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:在本篇博客中,我们深入研究了基于YOLOv8/v7/v6/v5的手写数字和符号识别系统。本系统的核心采用了YOLOv8技术,并整合了YOLOv7、YOLOv6、YOLOv5算法来进行性能指标的对比分析。我们详细地回顾了国内外在手写数字和符号识别领域的研究现状,并对使用到的数据集处理方法、算法原理、模......