java排列组合实例

01package test;
02import java.util.ArrayList;
03import java.util.Collections;
04import java.util.HashMap;
05import java.util.List;
06import java.util.Map;
07   
08import org.apache.commons.lang.StringUtils;
09   
10/**
11 *
12 * @author adcwa
13 *
14 */
15public 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}

文章来源: 学什么
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值