有没有一种有效的方法来查找
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]]