Custom sorting algorithm using java collection classes
On Given Map of Character and Priority of character, design your own sorting algorithm to sort list of strings.
There will be two inputs as per below.
Input:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Map<Character, Integer> characterIndexMap = new TreeMap<Character, Integer>() { { put('z', 0); put('q', 1); put('a', 2); put('s', 3); put('d', 4); put('y', 5); put('c', 6); } }; List<String> listOfStringsToSort = new ArrayList<String>() { { add("zasd"); add("qazyc"); add("yczaq"); add("caq"); add("czq"); add("dzaq"); add("czqa"); add("zzsd"); } }; |
Output:
1 2 3 4 5 6 7 8 |
zzsd zasd qazyc dzaq yczaq czq czqa caq |
Algorithm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package com.omt.learn.algo; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeMap; /* * zzsd zasd qazyc dzaq yczaq czq czqa caq */ public class CustomSortingUsingJavaClasses { public static void main(String args[]) { Map<Character, Integer> characterIndexMap = new TreeMap<Character, Integer>() { { put('z', 0); put('q', 1); put('a', 2); put('s', 3); put('d', 4); put('y', 5); put('c', 6); } }; List<String> listOfStringsToSort = new ArrayList<String>() { { add("zasd"); add("qazyc"); add("yczaq"); add("caq"); add("czq"); add("dzaq"); add("czqa"); add("zzsd"); } }; sortList(characterIndexMap, listOfStringsToSort); for (String string : listOfStringsToSort) { System.out.println(string); } } public static void sortList(Map<Character, Integer> characterIndexMap, List<String> listOfStringsToSort) { Collections.sort(listOfStringsToSort, new Comparator<String>() { @Override public int compare(String o1, String o2) { int min = Math.min(o1.length(), o2.length()); int index = 0; while (index < min) { if (o1.charAt(index) != o2.charAt(index)) { return characterIndexMap.get(o1.charAt(index)) - characterIndexMap.get(o2.charAt(index)); } index++; } return o1.length() - o2.length(); }; }); } } |