前言:

之前用的是最暴力的方式来实现的,也就是四个复选框写四层循环。

但是我也太low了把。。。

这个实际上就是一个笛卡儿积的运算。

先说一下需求,

质检是有规则的,比如有一个比例。

然后根据城市和年龄还有产品渠道 能够得到一条确定的规则,如果配置了规则的话。

那么,如果在前端勾选规则,

["天津","北京"]*["营销渠道","xx渠道"]*["60岁","40岁"]*["一号产品","二号产品"]

实际上穿得是编号,在这种业务需求里面,把上述条件配置了百分之20比如。

那么这应该是一种Key value的一种形式,并不该用MYSQL来存这种关系。

那么得到所有条件的数组就是第一步操作,之后使用redis来存放就好了。

笛卡尔积的算法,实际上每家公司都是一样的。

对于2B的业务来说,怎么样灵活动态才是体现一个程序员的价值的标准,否则来一家公司就给自己添堵了。。

后续重构这部分业务吧。我是真的没人带,这也太难了。

笛卡儿积的实现代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;public class CartesianArith {public static <T> List<List<T>> cartesianProduct(T[]... sets) {if (sets == null || sets.length == 0) {return Collections.emptyList();}int total = 1;//声明进位指针cIndexint cIndex = sets.length - 1;//声明counterMap(角标 - counter)int[] counterMap = new int[sets.length];for (int i = 0; i < sets.length; i++) {counterMap[i] = 0;total *= (sets[i] == null || sets[i].length == 0 ? 1 : sets[i].length);}List<List<T>> rt = new ArrayList<>(total);//开始求笛卡尔积while (cIndex >= 0) {List<T> element = new ArrayList<>(sets.length);for (int j = 0; j < sets.length; j++) {T[] set = sets[j];//忽略空集if (set != null && set.length > 0) {element.add(set[counterMap[j]]);}//从末位触发指针进位if (j == sets.length - 1) {if (set == null || ++counterMap[j] > set.length - 1) {//重置指针counterMap[j] = 0;//进位int cidx = j;while (--cidx >= 0) {//判断如果刚好前一位也要进位继续重置指针进位if (sets[cidx] == null || ++counterMap[cidx] > sets[cidx].length - 1) {counterMap[cidx] = 0;continue;}break;}if (cidx < cIndex) {//移动进位指针cIndex = cidx;}}}}if (element.size() > 0) {rt.add(element);}}return rt;}public static void main(String[] args) {System.out.println(Arrays.deepToString(cartesianProduct(new String[]{"0", "1"}, new String[]{"0", "1", "2"}, new String[]{"0", "1", "2"}).toArray()));}
}

笛卡尔积算法

转自:https://blog.csdn.net/m0_38043362/article/details/80944879

[笛卡儿积]业务中的复选框条件--输出所有的情况结果相关推荐

  1. php让符合条件的复选框选中,多条件查询(复选框条件)

    查询会遍历表,显现是出表和以前讲的一样,就不多说了,说下怎么写复选框条件 一.遍历复选框中的内容,列表名:其他的都是一样的遍历方法 区域:全选 $sqla = " select distin ...

  2. 获取jQuery中的复选框值

    如何在jQuery中获取复选框的值? #1楼 尝试这个小解决方案: $("#some_id").attr("checked") ? 1 : 0; 要么 $(&q ...

  3. 在reader中勾选pdf复选框_绝对可勾选的在WORD 2003中加入复选框的方法

    绝对可勾选的在 word 2003 中加入复选框的方法 方法一: 要在 word 2003 中加入复选框,最好是使用"控件工具箱"来完成. 具体方法是: 打开 Word ,依次点击 ...

  4. 在word 2007中插入复选框

    在Word2007中插入复选框Checkbox 2008-10-31 12:06 要在Office 2007中插入复选框,需要先点击"Office按钮"->"Wor ...

  5. php表单复选传值,jQuery+SpringMVC中的复选框选择与传值实例_jquery

    下面我就为大家分享一篇jQuery+SpringMVC中的复选框选择与传值实例,具有很好的参考价值,希望对大家有所帮助. 一.checkbox选择 在jQuery中,选中checkbox通用的两种方式 ...

  6. 中添加复选框_Word/excel中在方框中打钩/叉的符号,简单方便快捷

    方法1:插入特殊符号 将光标定位于需要打钩的地方,选择[插入]--[符号]--[其他符号]--更改字体为[Windings2] 方法2:使用快捷键 从上面的截图中可以看到设置快捷键,所以在插入特殊符号 ...

  7. 在WPF TreeView中使用复选框

    目录 介绍 背景 细节决定成败 功能要求 将Smarts放入ViewModel 树视图配置 将TreeViewItem变成ToggleButton Aero主题中的复选框错误 介绍 本文回顾了一个WP ...

  8. 【Qt】QTableView中嵌入复选框CheckBox 的四种方法总结

    搜索了一下,QTableView中嵌入复选框CheckBox方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简单,通常用这种方法. 第三种只适合静态显示静态数据用 第四 ...

  9. 【Apache Poi】如何使用poi在word中生成复选框

    如何使用poi在word中生成复选框 应用场景 解决方式 代码示例 结语 应用场景 我们经常会在开发中遇到需要通过Poi来生成类似下面这样的复选框 解决方式 我们可以通过unicode编码:\u25A ...

最新文章

  1. 字节博士搞的AI火了,一键完美分离人声和伴奏 | 在线可玩
  2. 几种jvm OOM问题
  3. (转)淘淘商城系列——商品搜索功能测试
  4. mysql关于学校的专业院系_大学里分的院校和分专业系有什么不同
  5. 物料移动类型和后勤自动科目设置-SAP屠夫
  6. 《zabbix_agent客户端的添加》-5
  7. SpringBoot两种定时任务(Spring Schedule 与 Quartz 整合 )实现
  8. 拓端tecdat|【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享
  9. 20190605每日一句你的态度决定了你的人生高度
  10. Atitit.biz业务系统 面向框架  面向模式---------数据映射imp
  11. Js脚本之jQuery学习笔记(1)
  12. 图片转文字,手机摇身一变就是万能扫描仪!
  13. 【SQL】实验十 数据库完整性实验
  14. Chrome安装ElasticSearch-head插件
  15. 概率论在实际生活的例子_日常生活中的概率统计
  16. 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)
  17. 考虑体积重量的装箱问题(箱子装载平衡)— 基于遗传算法
  18. 硬核万字总结:看完这 20 道 Redis 面试题,女朋友都面上阿里了
  19. opencv 实现 Photoshop 亮度 对比度 调节功能
  20. 三大运营商物联卡哪家网络稳定

热门文章

  1. Android 高德地图key获取、坐标定位
  2. kali_vps,debian,Ubuntu下搭建LAMP环境
  3. 产品经理基础——需求文档
  4. S3C2450自动升级
  5. Python实现SVM的实例(包括网格调参和测试)总结综述
  6. spss基础-5.8
  7. h5物体拖动_【点我解锁】11种网易爆款H5交互手势及案例
  8. 3、JVM JDK 和 JRE
  9. 儿时的生活还记得吗?
  10. 新版Matlab中神经网络训练函数Newff的使用方法