Given an array of input, print the value based on the sequence of occurrence
Input : [0,1,2,3,0,0,2,2,3,0]
Output: [0,0,0,0,1,2,2,2,3,3]
Code:
package wordpress; import java.util.*; import java.util.stream.Collectors; public class SequenceOfNumbers { private static void sequenceOfCount(Integer[] input) { Map<Integer, Integer> countMap = new HashMap<>(); for (Integer value : input) { if (countMap.containsKey(value)) { int count = countMap.get(value); countMap.put(value, ++count); } else { countMap.put(value, 1); } } Map<Integer, Integer> sortedMap = countMap.entrySet().stream() .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); List<Integer> result = new LinkedList<>(); for(Map.Entry<Integer,Integer> value :sortedMap.entrySet()){ for(int i=0;i<value.getValue();i++){ result.add(value.getKey()); } } System.out.println(result); } public static void main(String[] args) { sequenceOfCount(new Integer[]{0, 1, 2, 3, 0, 0, 2, 2, 3, 0}); //0, 0, 0, 0, 1, 2, 2, 2, 3, 3 sequenceOfCount(new Integer[]{1,2,3,1,}); // 1 1 2 3 sequenceOfCount(new Integer[]{-1,1,-1,1}); // -1 -1 1 1 sequenceOfCount(new Integer[]{4,3,2,1}); // 1 2 3 4 } }