在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

排列组合

2016-7-29 15:45| 发布者: zhangjf| 查看: 617| 评论: 0

摘要: 在多个集合中,从每个集合中取一个值 组成 一个新的集合,新集合中值的个数可以自定义, package test; import java.util.ArrayList; import java.util.Collections; import java.util.HashMa ...
在多个集合中,从每个集合中取一个值 组成 一个新的集合,新集合中值的个数可以自定义,
  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.commons.lang.StringUtils;
  8. /**
  9. *
  10. * @author adcwa
  11. *
  12. */
  13. public class TestSelect {
  14. /**
  15. * 模拟数据
  16. * @param start
  17. * @param size
  18. * @return
  19. */
  20. public static List<String> initArr(int start,int size){
  21. List<String> arr = new ArrayList<String>();
  22. for(int i = 0;i<size;i++){
  23. arr.add(String.valueOf(i+start));
  24. }
  25. return arr;
  26. }
  27. /**
  28. * 排列组合
  29. * @param groupedListMap 分组的值,从每个组中取一个作排列组合
  30. * @param selected 参数可为空, 递归用
  31. * @param values 最终返回的值
  32. * @param moreThan 选不小于的值 个数
  33. * @param lessThan 选 不大于的值个数
  34. */
  35. public static void selectPermutation(Map<String,List<String>> groupedListMap,Map<String,String> selected,Map<String,List<String> > values,int moreThan,int lessThan){
  36. if(null==selected){
  37. selected = new HashMap<String,String>();
  38. }
  39. for(String groupKey :groupedListMap.keySet()){
  40. if(selected.keySet().contains(groupKey)) continue;
  41. Map<String,String> subSelected = new HashMap<String, String>();
  42. subSelected.putAll(selected);
  43. for(String innerValue:groupedListMap.get(groupKey)){
  44. subSelected.put(groupKey, innerValue);
  45. if(moreThan<=subSelected.values().size()&&subSelected.values().size()<=lessThan)
  46. values.put(StringUtils.join(subSelected.values().toArray(),","),new ArrayList<String>( subSelected.values()));
  47. selectPermutation(groupedListMap, subSelected,values,moreThan,lessThan);
  48. }
  49. }
  50. }
  51. public static void main(String[] args) {
  52. Map<String,List<String>> groupedListMap = new HashMap<String, List<String>>();
  53. groupedListMap.put("ONE", initArr(0,3));
  54. groupedListMap.put("TWO", initArr(5,2));
  55. groupedListMap.put("THREE", initArr(10,4));
  56. groupedListMap.put("FOUR", initArr(-5,4));
  57. Map<String,List<String> > values = new HashMap<String, List<String>>();
  58. selectPermutation(groupedListMap, new HashMap<String, String>(), values,0,3);
  59. List<String> sortList = new ArrayList<String>(values.keySet());
  60. Collections.sort(sortList);
  61. for(int i = 0;i<sortList.size();i++){
  62. System.out.println(i+":"+sortList.get(i));
  63. }
  64. }
  65. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 12:31

Copyright 2015-2025 djqfx

返回顶部