在多个集合中,从每个集合中取一个值 组成 一个新的集合,新集合中值的个数可以自定义,
- 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));
- }
- }
- }
复制代码 |