* \r
* @return A Arraylist which contains a array list of all possible combinations\r
*/\r
- @SuppressWarnings("serial")\r
- public ArrayList<ArrayList<String>> getSuggestionsPermutation(List<String> list) {\r
- List<String> statusList = new ArrayList<>(list);\r
- List<String> dupStatusList;\r
- ArrayList<ArrayList<String>> uniqueList = new ArrayList<ArrayList<String>>();\r
- int mainLoopIndexCounter = 0;\r
- for (String status : statusList) {\r
- // Add the single entity subset\r
- uniqueList.add(new ArrayList<String>() {\r
- {\r
- add(status);\r
- }\r
- });\r
- // Remove all the elements to left till the current index\r
- dupStatusList = truncateListUntill(statusList, mainLoopIndexCounter);\r
+ public static ArrayList<ArrayList<String>> getUniqueListForSuggestions(\r
+ List<String> originalList) {\r
+ ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();\r
+ if (originalList.isEmpty()) {\r
+ lists.add(new ArrayList<String>());\r
+ return lists;\r
+ }\r
+ List<String> list = new ArrayList<String>(originalList);\r
+ String head = list.get(0);\r
+ ArrayList<String> rest = new ArrayList<String>(list.subList(1, list.size()));\r
\r
- while (dupStatusList.size() > 0) {\r
- ArrayList<String> suggListInIterate = new ArrayList<>();\r
- suggListInIterate.add(status);\r
- for (String dupStatus : dupStatusList) {\r
- suggListInIterate.add(dupStatus);\r
- }\r
- uniqueList.add(suggListInIterate);\r
- dupStatusList.remove(0);\r
- }\r
- mainLoopIndexCounter++;\r
+ for (ArrayList<String> activeList : getUniqueListForSuggestions(rest)) {\r
+ ArrayList<String> newList = new ArrayList<String>();\r
+ newList.add(head);\r
+ newList.addAll(activeList);\r
+ lists.add(newList);\r
+ lists.add(activeList);\r
}\r
- return uniqueList;\r
+ return lists;\r
+ }\r
\r
+ public static ArrayList<ArrayList<String>> getNonEmptyUniqueLists(List<String> list) {\r
+ ArrayList<ArrayList<String>> lists = getUniqueListForSuggestions(list);\r
+ // remove empty list from the power set\r
+ for (ArrayList<String> emptyList : lists) {\r
+ if (emptyList.isEmpty()) {\r
+ lists.remove(emptyList);\r
+ break;\r
+ }\r
+ }\r
+ return lists;\r
}\r
\r
- private List<String> truncateListUntill(List<String> lists, int index) {\r
- List<String> truncatedList = new ArrayList<>(lists);\r
- int counter = 0;\r
- while (counter <= index) {\r
- truncatedList.remove(0);\r
- counter++;\r
+ public static List<List<String>> getListPermutations(List<String> list) {\r
+ List<String> inputList = new ArrayList<String>();\r
+ inputList.addAll(list);\r
+ if (inputList.size() == 0) {\r
+ List<List<String>> result = new ArrayList<List<String>>();\r
+ result.add(new ArrayList<String>());\r
+ return result;\r
}\r
- return truncatedList;\r
+\r
+ List<List<String>> listOfLists = new ArrayList<List<String>>();\r
+\r
+ String firstElement = inputList.remove(0);\r
+\r
+ List<List<String>> recursiveReturn = getListPermutations(inputList);\r
+ for (List<String> li : recursiveReturn) {\r
+\r
+ for (int index = 0; index <= li.size(); index++) {\r
+ List<String> temp = new ArrayList<String>(li);\r
+ temp.add(index, firstElement);\r
+ listOfLists.add(temp);\r
+ }\r
+\r
+ }\r
+ return listOfLists;\r
}\r
+\r
}\r