/** * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * Copyright © 2017 Amdocs * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= * * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.aai.datarouter.util; import java.util.ArrayList; import java.util.List; public class SearchSuggestionPermutation { /* * Will return all the unique combinations of the suggestions provided. * The order of the permutation is not taken into account when computing * the uniqueness. * e.g.: A list of A,B,C,D will return * [[A], [A, B, C, D], [A, C, D], [A, D], [B], [B, C, D], [B, D], [C], [C, D], [D]] * * @param list The list of statuses to create permutations of * @return A list which contains a array list of all possible combinations */ public static ArrayList> getUniqueListForSuggestions( List originalList) { ArrayList> lists = new ArrayList<>(); if (originalList.isEmpty()) { lists.add(new ArrayList()); return lists; } List list = new ArrayList<>(originalList); String head = list.get(0); ArrayList rest = new ArrayList<>(list.subList(1, list.size())); for (ArrayList activeList : getUniqueListForSuggestions(rest)) { ArrayList newList = new ArrayList<>(); newList.add(head); newList.addAll(activeList); lists.add(newList); lists.add(activeList); } return lists; } public static ArrayList> getNonEmptyUniqueLists(List list) { ArrayList> lists = getUniqueListForSuggestions(list); // remove empty list from the power set for (ArrayList emptyList : lists) { if (emptyList.isEmpty()) { lists.remove(emptyList); break; } } return lists; } public static List> getListPermutations(List list) { List inputList = new ArrayList<>(); inputList.addAll(list); if (inputList.isEmpty()) { List> result = new ArrayList<>(); result.add(new ArrayList()); return result; } List> listOfLists = new ArrayList<>(); String firstElement = inputList.remove(0); List> recursiveReturn = getListPermutations(inputList); for (List li : recursiveReturn) { for (int index = 0; index <= li.size(); index++) { List temp = new ArrayList<>(li); temp.add(index, firstElement); listOfLists.add(temp); } } return listOfLists; } }