有没有一种有效的方法来查找
Java中多个枚举之间的所有可能组合?
考虑以下三个枚举 –
public enum EnumOne { One ("One"),OneMore ("OneMore"); } public enum EnumTwo { Two ("Two"),} public enum EnumThree { Three ("Three"),ThreeMore ("ThreeMore"); }
我希望输出产生这些多个枚举之间的所有可能组合,即
{EnumOne.One,EnumTwo.Two,EnumThree.Three},{EnumOne.One,EnumThree.ThreeMore},{EnumOne.OneMore,EnumThree.ThreeMore}
希望找到一种有效的方法来处理它.
谢谢
解决方法
算法的复杂性是O(NxMxK …. xZ),如果我错了,我不知道它是否是一种“有效的方式”….我用它作为一种回溯解决方案
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ProductEnums { public enum EnumOne { One,OneMore; } public enum EnumTwo { Two,} public enum EnumThree { Three,ThreeMore; } public static void main(String[] args) { // pass each values in enums List a = product(EnumOne.values(),EnumTwo.values(),EnumThree.values()); System.out.println(a); } public static List<List<Enum>> product(Enum[]... enums) { return product(new ArrayList<>(Arrays.asList(enums))); } public static List<List<Enum>> product(List<Enum[]> enums) { if (enums.isEmpty()) { //Trivial case of recursive function return new ArrayList<>(); } //remove first element Enum[] myEnums = enums.remove(0); List<List<Enum>> out = new ArrayList<>(); for (Enum e : myEnums) { //call recursive List<List<Enum>> list = product(enums); for (List<Enum> list_enum : list) { //for each list get from recursion adding element e list_enum.add(0,e); out.add(list_enum); } if(list.isEmpty()){ List<Enum> list_enum = new ArrayList<>(); list_enum.add(e); out.add(list_enum); } } enums.add(0,myEnums); //Backtraking return out; } }
结果
[[One,Two,Three],[One,ThreeMore],[OneMore,ThreeMore]]