java – 查找所有可能的枚举组合
发布时间:2020-05-25 13:51:15 所属栏目:Java 来源:互联网
导读:有没有一种有效的方法来查找 Java中多个枚举之间的所有可能组合? 考虑以下三个枚举 – public enum EnumOne { One (One), OneMore (OneMore);}public enum EnumTwo { Two (Two),}public enum EnumThree { Three (Three), Th
|
有没有一种有效的方法来查找 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;
}
}
结果
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
