加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 查找所有可能的枚举组合

发布时间:2020-12-15 00:34:39 所属栏目:Java 来源:网络整理
导读:有没有一种有效的方法来查找 Java中多个枚举之间的所有可能组合? 考虑以下三个枚举 – public enum EnumOne { One ("One"),OneMore ("OneMore");}public enum EnumTwo { Two ("Two"),}public enum EnumThree { Three ("Three"),ThreeMore ("ThreeMore");}
有没有一种有效的方法来查找 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]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读