在公司项目中,遇到了提交接口中涉及java的笛卡尔积算法,这里记录下来。
这里说明下参数:
第一个参数是我们需要进行笛卡尔积计算的集合,它类似于:
[ [ { xx: xx} ],[ { xx2: xx2 } ] ]
第二个参数是最终返回的集合,它类似于:
[ { xx:xx},{xx:xx} ]
第三个参数是累加器,初始调用传0
第四个参数是map格式,它的作用在于我们方法内部会递归调用,保留上一次的内容,初始调用就new个空的Hashmap对象

public static void toDescartes(List<List<Map<String, String>>> ds, List<Map<String, String>> result, int layer,Map<String, String> curMap) {if (layer < ds.size() - 1) {if (ds.get(layer).size() == 0) {toDescartes(ds, result, layer + 1,curMap);} else {for (int i = 0; i < ds.get(layer).size(); i++) {//声明个装完整数据的map且为前面的mapMap<String,String> mapKing = new HashMap<String, String>(curMap);//声明循环下的map数据容器Map<String,String> mapCurI = new HashMap<String, String>(ds.get(layer).get(i));//循环map数据 压进新map 通过key    Set<T> key = map.keySet()for(String key:mapCurI.keySet()){//System.out.println("key="+key+" value="+mapCurI.get(key));mapKing.put(key, mapCurI.get(key));}toDescartes(ds, result, layer + 1, mapKing);}}} else if (layer == ds.size() - 1) {if (ds.get(layer).size() == 0) {result.add(curMap);} else {for (int i = 0; i < ds.get(layer).size(); i++) {Map<String,String> mapKing = new HashMap<String, String>(curMap);//声明循环下的map数据容器Map<String,String> mapCurI = new HashMap<String, String>(ds.get(layer).get(i));//循环map数据 压进新map 通过key    Set<T> key = map.keySet()for(String key:mapCurI.keySet()){mapKing.put(key, mapCurI.get(key));}result.add(mapKing);}}}}

上面的代码,只是适用于当时情况,其余的情况只是第一参数和返回值格式不一样而已,按照自己的场景修改即可。

Java_笛卡尔积计算相关推荐

  1. 复利java_复利计算1.0,2.0,3.0(java)

    importjava.util.Scanner;public classch {public static voidmain(String[] args) { Scanner scanner= new ...

  2. 个人所得税 java_个人所得税计算java版

    1 /** 2 * 计算个人所得税3 * www.xcc.cn 版权所有4 *@paramminusAmount 扣除社保的金额5 *@paramminusAmount2 当月工资(扣除社保后)(算年 ...

  3. python笛卡尔_Python 计算笛卡尔积

    Python 计算笛卡尔积 计算多个集合的笛卡尔积,有规律可循,算法和代码也不难,但是很多语言都没有提供直接计算笛卡尔积的方法,需要自己写大段大段的代码计算笛卡尔积,python 提供了一种最简单的计 ...

  4. php 计算多个集合的笛卡尔积

    笛卡尔积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X*Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员. 假设集合A={a,b ...

  5. 基于junit4的关于个人所得税计算的等价类与边界值_《边界值分析》-有这篇就够了...

    目录: 定义(What) 为什么使用该方法?(Why) 如何选定边界值?(How) 设计测试用例 根据测试用例的完整性划分 边界的分类 使用场景 实战演练 边界值分析的优缺点 特殊值测试 边界值分析和 ...

  6. 笛卡尔积实现-JavaScript版

    首先我们要知道什么是笛卡尔积? 百度百科 > 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象 ...

  7. 笛卡尔积 php,PHP 笛卡尔积

    笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的. 简单的说就是两个集合相乘的结果. 具体的定义去看看有关代数系的书的定义. 直观的说就是 集合A{a1,a2,a3} 集合B{b1,b2} 他们的 ...

  8. 快速计算每个学生成绩最相似的10个学生(万级别数据量)

    作者:小小明 10年编码经验,熟悉Java.Python和Scala,非常擅长解决各类复杂数据处理的逻辑,各类结构化与非结构化数据互转,字符串解析匹配等等. 至今已经帮助至少百名数据从业者解决工作中的 ...

  9. 从原理到落地,七大维度读懂协同过滤推荐算法

    作者丨gongyouliu 来源 | 大数据与人工智能 导语:本文会从协同过滤思想简介.协同过滤算法原理介绍.离线协同过滤算法的工程实现.近实时协同过滤算法的工程实现.协同过滤算法应用场景.协同过滤算 ...

最新文章

  1. java 获取java文件路径_Java怎么获取相对路径下所有的.java文件的信息
  2. 【Mac】【环境变量】
  3. 深入字节码操作:使用ASM和Javassist创建审核日志
  4. SpringCloud:Zuul 路由访问(基本使用、路由功能、过滤访问、服务降级)
  5. Netflix如何通过支持TLS 1.3提供更安全高效的播放体验
  6. INTEROP tile cache
  7. PID算法搞不懂?看这篇文章。
  8. 【教程】nrf51822实例代码解析及修改实例
  9. linux文件内上下移动,Linux中有多个查看文件的命令,如果希望在查看文件内容过程中用光标可以上下移动来查看文件内容,则符合要求的那一个命令是( )。...
  10. auto.js停止所有线程_使用多线程处理输入的数据
  11. Software caused connection abort: socket write error 问题原因推测
  12. Win8(X64)下MySQL5.6版本安装及配置
  13. vue表单中批量导入功能_Vue 编辑 新建表单复用的一些思考
  14. 项目开发文档是必须的
  15. 软件测试工程师职业发展方向及前景
  16. 云更新网吧系统服务器,网吧云更新系统使用图文教程
  17. linux boot efi 大小,/boot/efi。
  18. php - 解决百万级全站用户消息推送问题
  19. whm面板降mysql_在cPanel&WHM 78版上可以取消阻止MySQL 5.5
  20. sql中向下取整怎么取_SQL中的取整函数、取小数

热门文章

  1. 程序员外包接单网站记录
  2. Unity --- 导航网格 与 导航的使用
  3. python numpy 版本问题:error module compiled against API version 0xc but this version of numpy is 0xb
  4. python读取读取txt文件与写入txt文件
  5. 重启防火墙(iptables)命令#service iptable restart失效
  6. 前端ajax实现分页思路详解
  7. OpenLayers加载天地图
  8. 用TinySpider进行网页抓取实例
  9. 量化金融分析AQF(1):股票概述
  10. payjs 源码_GitHub - wlijie/payjs_test: PAYJS 小程序支付框架与示例