import java.util.Arrays; import java.util.List; class Scratch { /** https://stackoverflow.com/questions/31258430/java-convert-int-to-smallest-representation-as-ranges */ public static void main(String[] args) { List array = new java.util.ArrayList(); System.out.println(getRange(array)); array.add(1); System.out.println(getRange(array)); array.addAll(java.util.Arrays.asList(new Integer[]{3, 5, 4, 8, 9, 10})); System.out.println(getRange(array)); array.add(2); System.out.println(getRange(array)); array.add(15); System.out.println(getRange(array)); /** output 1 1,3-5,8-10 1-5,8-10 1-5,8-10,15 */ } public static String getRange(List array) { Integer[] nums = array.toArray(new Integer[array.size()]); Arrays.sort(nums); StringBuilder sb = new StringBuilder(); if (nums.length == 0) return sb.toString(); int begin = nums[0], end = nums[0]; for (int cur : nums) if (cur - end <= 1) end = cur; else { appendRange(sb, begin, end); begin = end = cur; } appendRange(sb, begin, end); return sb.substring(1); } private static void appendRange(StringBuilder sb, int begin, int end) { sb.append(",").append(begin); if (end != begin) sb.append("-").append(end); } }