| 在多个集合中,从每个集合中取一个值 组成 一个新的集合,新集合中值的个数可以自定义, 复制代码package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
/**
 * 
 * @author adcwa
 *
 */
public class TestSelect {
    /**
     * 模拟数据 
     * @param start
     * @param size
     * @return
     */
    public static     List<String>  initArr(int start,int size){
        List<String> arr = new ArrayList<String>();
        for(int i = 0;i<size;i++){
            arr.add(String.valueOf(i+start));
        }
        return arr;
    }
    /**
     * 排列组合
     * @param groupedListMap 分组的值,从每个组中取一个作排列组合
     * @param selected  参数可为空, 递归用
     * @param values    最终返回的值
     * @param moreThan  选不小于的值 个数
     * @param lessThan  选 不大于的值个数
     */
    public static void selectPermutation(Map<String,List<String>> groupedListMap,Map<String,String> selected,Map<String,List<String> > values,int moreThan,int lessThan){
        if(null==selected){
            selected = new HashMap<String,String>();
        }
        for(String groupKey :groupedListMap.keySet()){
            if(selected.keySet().contains(groupKey)) continue;
            
            Map<String,String> subSelected = new HashMap<String, String>();
            subSelected.putAll(selected);
            
            for(String innerValue:groupedListMap.get(groupKey)){
                subSelected.put(groupKey, innerValue);
                if(moreThan<=subSelected.values().size()&&subSelected.values().size()<=lessThan)
                values.put(StringUtils.join(subSelected.values().toArray(),","),new ArrayList<String>( subSelected.values()));
                selectPermutation(groupedListMap, subSelected,values,moreThan,lessThan);
            }
            
        }
    }
    
    
    
    
    public static void main(String[] args) {
        Map<String,List<String>> groupedListMap = new HashMap<String, List<String>>();
        groupedListMap.put("ONE", initArr(0,3));
        groupedListMap.put("TWO", initArr(5,2));
        groupedListMap.put("THREE", initArr(10,4));
        groupedListMap.put("FOUR", initArr(-5,4));
        Map<String,List<String> > values = new HashMap<String, List<String>>();
        selectPermutation(groupedListMap, new HashMap<String, String>(), values,0,3);
        List<String>  sortList = new ArrayList<String>(values.keySet());
        Collections.sort(sortList);
        for(int i = 0;i<sortList.size();i++){
            System.out.println(i+":"+sortList.get(i));
        }
    }
}
 |