java 循环问题 java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void main(String[] args) { // {15,M},{15,L},{15,XL},{16,黑色},{16,红色},{16,蓝色},{17,棉},{17,麻} // 整合成如下数据应该不难,不赘述 Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); List<String> list15 = new ArrayList<String>(); list15.add("M"); list15.add("L"); list15.add("XL"); List<String> list16 = new ArrayList<String>(); list16.add("黑色"); list16.add("红色"); list16.add("蓝色"); List<String> list17 = new ArrayList<String>(); list17.add("棉"); list17.add("麻"); map.put(15, list15); map.put(16, list16); map.put(17, list17); // 单独一个List记录map的有序的key值列表// 关键是有序 List<Integer> keys = new ArrayList<Integer>(); keys.add(15); keys.add(16); keys.add(17); // 递归调用 combination(keys, map); } /** * keys已经排好序,map为需要显示的内容。初始的keys一定会在map中找到对应值,这里不做过多合法性校验 */ private static void combination(List<Integer> keys, Map<Integer, List<String>> map) { // 合法性校验 if (null == keys || keys.isEmpty()) { return; } // 第一个为起始 List<String> starts = map.get(keys.get(0)); // 遍历并开始拼接显示内容 for (String start : starts) { coreCombinate(start, keys.subList(1, keys.size()), map); } } /** * 核心递归的方法 */ private static void coreCombinate(String start, List<Integer> subList, Map<Integer, List<String>> map) { // 递归的收敛处 if (null == subList || subList.isEmpty()) { // 如果需要返回,可以透传一个List<String>用来存储 System.out.println(start); return; } // 第一个为起始 List<String> starts = map.get(subList.get(0)); // 遍历并开始拼接显示内容// 这里与上一层方法略有不同 for (String startInner : starts) { String startNew = start + startInner; coreCombinate(startNew, subList.subList(1, subList.size()), map); } } 走过,路过,不要错过,有个好问题!~~ richfaces之listshuttle如何在后台获得两个list中的值? java program如何catch oracle 拋出的异常 cascase="all" 但不能级联保存 更新出现错误 Hibernate检索排序问题 做EJB实例教程的例子时遇到的问题 ext的grid组件 Sartorius - Java代码生成器 WebSocket实现问题,可以用Struts2实现嘛 日志量比较大 大概有10台记录日志的服务器 如何用log4j每小时每台日志服务器生成一个日志文件 使用stream类型的Result实现Ajax是出错
public static void main(String[] args) {
// {15,M},{15,L},{15,XL},{16,黑色},{16,红色},{16,蓝色},{17,棉},{17,麻}
// 整合成如下数据应该不难,不赘述
Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
List<String> list15 = new ArrayList<String>();
list15.add("M");
list15.add("L");
list15.add("XL");
List<String> list16 = new ArrayList<String>();
list16.add("黑色");
list16.add("红色");
list16.add("蓝色");
List<String> list17 = new ArrayList<String>();
list17.add("棉");
list17.add("麻");
map.put(15, list15);
map.put(16, list16);
map.put(17, list17); // 单独一个List记录map的有序的key值列表// 关键是有序
List<Integer> keys = new ArrayList<Integer>();
keys.add(15);
keys.add(16);
keys.add(17); // 递归调用
combination(keys, map);
} /**
* keys已经排好序,map为需要显示的内容。初始的keys一定会在map中找到对应值,这里不做过多合法性校验
*/
private static void combination(List<Integer> keys, Map<Integer, List<String>> map) {
// 合法性校验
if (null == keys || keys.isEmpty()) {
return;
} // 第一个为起始
List<String> starts = map.get(keys.get(0)); // 遍历并开始拼接显示内容
for (String start : starts) {
coreCombinate(start, keys.subList(1, keys.size()), map);
}
} /**
* 核心递归的方法
*/
private static void coreCombinate(String start, List<Integer> subList, Map<Integer, List<String>> map) {
// 递归的收敛处
if (null == subList || subList.isEmpty()) {
// 如果需要返回,可以透传一个List<String>用来存储
System.out.println(start);
return;
} // 第一个为起始
List<String> starts = map.get(subList.get(0)); // 遍历并开始拼接显示内容// 这里与上一层方法略有不同
for (String startInner : starts) {
String startNew = start + startInner;
coreCombinate(startNew, subList.subList(1, subList.size()), map);
}
}