01 | package test; |
02 | import java.util.ArrayList; |
03 | import java.util.Collections; |
04 | import java.util.HashMap; |
05 | import java.util.List; |
06 | import java.util.Map; |
07 | |
08 | import org.apache.commons.lang.StringUtils; |
09 | |
10 | /** |
11 | * |
12 | * @author adcwa |
13 | * |
14 | */ |
15 | public class TestSelect { |
16 | /** |
17 | * 模拟数据 |
18 | * @param start |
19 | * @param size |
20 | * @return |
21 | */ |
22 | public static List<String> initArr(int start,int size){ |
23 | List<String> arr = new ArrayList<String>(); |
24 | for(int i = 0;i<size;i++){ |
25 | arr.add(String.valueOf(i+start)); |
26 | } |
27 | return arr; |
28 | } |
29 | /** |
30 | * 排列组合 |
31 | * @param groupedListMap 分组的值,从每个组中取一个作排列组合 |
32 | * @param selected 参数可为空, 递归用 |
33 | * @param values 最终返回的值 |
34 | * @param moreThan 选不小于的值 个数 |
35 | * @param lessThan 选 不大于的值个数 |
36 | */ |
37 | public static void selectPermutation(Map<String,List<String>> groupedListMap,Map<String,String> selected,Map<String,List<String> > values,int moreThan,int lessThan){ |
38 | if(null==selected){ |
39 | selected = new HashMap<String,String>(); |
40 | } |
41 | for(String groupKey :groupedListMap.keySet()){ |
42 | if(selected.keySet().contains(groupKey)) continue; |
43 | |
44 | Map<String,String> subSelected = new HashMap<String, String>(); |
45 | subSelected.putAll(selected); |
46 | |
47 | for(String innerValue:groupedListMap.get(groupKey)){ |
48 | subSelected.put(groupKey, innerValue); |
49 | if(moreThan<=subSelected.values().size()&&subSelected.values().size()<=lessThan) |
50 | values.put(StringUtils.join(subSelected.values().toArray(),","),new ArrayList<String>( subSelected.values())); |
51 | selectPermutation(groupedListMap, subSelected,values,moreThan,lessThan); |
52 | } |
53 | |
54 | } |
55 | } |
56 | |
57 | |
58 | |
59 | |
60 | public static void main(String[] args) { |
61 | Map<String,List<String>> groupedListMap = new HashMap<String, List<String>>(); |
62 | groupedListMap.put("ONE", initArr(0,3)); |
63 | groupedListMap.put("TWO", initArr(5,2)); |
64 | groupedListMap.put("THREE", initArr(10,4)); |
65 | groupedListMap.put("FOUR", initArr(-5,4)); |
66 | Map<String,List<String> > values = new HashMap<String, List<String>>(); |
67 | selectPermutation(groupedListMap, new HashMap<String, String>(), values,0,3); |
68 | List<String> sortList = new ArrayList<String>(values.keySet()); |
69 | Collections.sort(sortList); |
70 | for(int i = 0;i<sortList.size();i++){ |
71 | System.out.println(i+":"+sortList.get(i)); |
72 | } |
73 | } |
74 | } |
文章来源:
学什么网
628

被折叠的 条评论
为什么被折叠?



