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

前端之家收集整理的这篇文章主要介绍了java – 查找所有可能的枚举组合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有一种有效的方法来查找 Java中多个枚举之间的所有可能组合?

考虑以下三个枚举 –

  1. public enum EnumOne {
  2. One ("One"),OneMore ("OneMore");
  3. }
  4.  
  5. public enum EnumTwo {
  6. Two ("Two"),}
  7.  
  8. public enum EnumThree {
  9. Three ("Three"),ThreeMore ("ThreeMore");
  10. }

我希望输出产生这些多个枚举之间的所有可能组合,即

  1. {EnumOne.One,EnumTwo.Two,EnumThree.Three},{EnumOne.One,EnumThree.ThreeMore},{EnumOne.OneMore,EnumThree.ThreeMore}

希望找到一种有效的方法来处理它.

谢谢

解决方法

算法的复杂性是O(NxMxK …. xZ),如果我错了,我不知道它是否是一种“有效的方式”….我用它作为一种回溯解决方
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4.  
  5. public class ProductEnums {
  6.  
  7. public enum EnumOne {
  8. One,OneMore;
  9. }
  10.  
  11. public enum EnumTwo {
  12. Two,}
  13.  
  14. public enum EnumThree {
  15. Three,ThreeMore;
  16. }
  17.  
  18. public static void main(String[] args) {
  19. // pass each values in enums
  20. List a = product(EnumOne.values(),EnumTwo.values(),EnumThree.values());
  21. System.out.println(a);
  22. }
  23.  
  24. public static List<List<Enum>> product(Enum[]... enums) {
  25. return product(new ArrayList<>(Arrays.asList(enums)));
  26. }
  27.  
  28. public static List<List<Enum>> product(List<Enum[]> enums) {
  29. if (enums.isEmpty()) {
  30. //Trivial case of recursive function
  31. return new ArrayList<>();
  32. }
  33. //remove first element
  34. Enum[] myEnums = enums.remove(0);
  35. List<List<Enum>> out = new ArrayList<>();
  36. for (Enum e : myEnums) {
  37. //call recursive
  38. List<List<Enum>> list = product(enums);
  39. for (List<Enum> list_enum : list) {
  40. //for each list get from recursion adding element e
  41. list_enum.add(0,e);
  42. out.add(list_enum);
  43. }
  44. if(list.isEmpty()){
  45. List<Enum> list_enum = new ArrayList<>();
  46. list_enum.add(e);
  47. out.add(list_enum);
  48. }
  49. }
  50. enums.add(0,myEnums); //Backtraking
  51. return out;
  52. }
  53. }

结果

[[One,Two,Three],[One,ThreeMore],[OneMore,ThreeMore]]

猜你在找的Java相关文章