Advertisement
Anzak

Represent Integer array as ranges

Oct 10th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.38 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.List;
  3.  
  4. class Scratch {
  5.  
  6. /** https://stackoverflow.com/questions/31258430/java-convert-int-to-smallest-representation-as-ranges */
  7.  
  8.   public static void main(String[] args) {
  9.     List<Integer> array = new java.util.ArrayList<Integer>();
  10.     System.out.println(getRange(array));
  11.     array.add(1);
  12.     System.out.println(getRange(array));
  13.     array.addAll(java.util.Arrays.asList(new Integer[]{3, 5, 4, 8, 9, 10}));
  14.     System.out.println(getRange(array));
  15.     array.add(2);
  16.     System.out.println(getRange(array));
  17.     array.add(15);
  18.     System.out.println(getRange(array));
  19.  
  20.     /** output
  21.      1
  22.      1,3-5,8-10
  23.      1-5,8-10
  24.      1-5,8-10,15
  25.      */
  26.   }
  27.  
  28.   public static String getRange(List<Integer> array) {
  29.     Integer[] nums = array.toArray(new Integer[array.size()]);
  30.     Arrays.sort(nums);
  31.     StringBuilder sb = new StringBuilder();
  32.     if (nums.length == 0) return sb.toString();
  33.     int begin = nums[0], end = nums[0];
  34.     for (int cur : nums)
  35.       if (cur - end <= 1)
  36.         end = cur;
  37.       else {
  38.         appendRange(sb, begin, end);
  39.         begin = end = cur;
  40.       }
  41.     appendRange(sb, begin, end);
  42.     return sb.substring(1);
  43.   }
  44.  
  45.   private static void appendRange(StringBuilder sb, int begin, int end) {
  46.     sb.append(",").append(begin);
  47.     if (end != begin)
  48.       sb.append("-").append(end);
  49.   }
  50.  
  51.  
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement