[笛卡儿积]业务中的复选框条件--输出所有的情况结果
前言:
之前用的是最暴力的方式来实现的,也就是四个复选框写四层循环。
但是我也太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
[笛卡儿积]业务中的复选框条件--输出所有的情况结果相关推荐
- php让符合条件的复选框选中,多条件查询(复选框条件)
查询会遍历表,显现是出表和以前讲的一样,就不多说了,说下怎么写复选框条件 一.遍历复选框中的内容,列表名:其他的都是一样的遍历方法 区域:全选 $sqla = " select distin ...
- 获取jQuery中的复选框值
如何在jQuery中获取复选框的值? #1楼 尝试这个小解决方案: $("#some_id").attr("checked") ? 1 : 0; 要么 $(&q ...
- 在reader中勾选pdf复选框_绝对可勾选的在WORD 2003中加入复选框的方法
绝对可勾选的在 word 2003 中加入复选框的方法 方法一: 要在 word 2003 中加入复选框,最好是使用"控件工具箱"来完成. 具体方法是: 打开 Word ,依次点击 ...
- 在word 2007中插入复选框
在Word2007中插入复选框Checkbox 2008-10-31 12:06 要在Office 2007中插入复选框,需要先点击"Office按钮"->"Wor ...
- php表单复选传值,jQuery+SpringMVC中的复选框选择与传值实例_jquery
下面我就为大家分享一篇jQuery+SpringMVC中的复选框选择与传值实例,具有很好的参考价值,希望对大家有所帮助. 一.checkbox选择 在jQuery中,选中checkbox通用的两种方式 ...
- 中添加复选框_Word/excel中在方框中打钩/叉的符号,简单方便快捷
方法1:插入特殊符号 将光标定位于需要打钩的地方,选择[插入]--[符号]--[其他符号]--更改字体为[Windings2] 方法2:使用快捷键 从上面的截图中可以看到设置快捷键,所以在插入特殊符号 ...
- 在WPF TreeView中使用复选框
目录 介绍 背景 细节决定成败 功能要求 将Smarts放入ViewModel 树视图配置 将TreeViewItem变成ToggleButton Aero主题中的复选框错误 介绍 本文回顾了一个WP ...
- 【Qt】QTableView中嵌入复选框CheckBox 的四种方法总结
搜索了一下,QTableView中嵌入复选框CheckBox方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简单,通常用这种方法. 第三种只适合静态显示静态数据用 第四 ...
- 【Apache Poi】如何使用poi在word中生成复选框
如何使用poi在word中生成复选框 应用场景 解决方式 代码示例 结语 应用场景 我们经常会在开发中遇到需要通过Poi来生成类似下面这样的复选框 解决方式 我们可以通过unicode编码:\u25A ...
最新文章
- 字节博士搞的AI火了,一键完美分离人声和伴奏 | 在线可玩
- 几种jvm OOM问题
- (转)淘淘商城系列——商品搜索功能测试
- mysql关于学校的专业院系_大学里分的院校和分专业系有什么不同
- 物料移动类型和后勤自动科目设置-SAP屠夫
- 《zabbix_agent客户端的添加》-5
- SpringBoot两种定时任务(Spring Schedule 与 Quartz 整合 )实现
- 拓端tecdat|【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享
- 20190605每日一句你的态度决定了你的人生高度
- Atitit.biz业务系统 面向框架 面向模式---------数据映射imp
- Js脚本之jQuery学习笔记(1)
- 图片转文字,手机摇身一变就是万能扫描仪!
- 【SQL】实验十 数据库完整性实验
- Chrome安装ElasticSearch-head插件
- 概率论在实际生活的例子_日常生活中的概率统计
- 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)
- 考虑体积重量的装箱问题(箱子装载平衡)— 基于遗传算法
- 硬核万字总结:看完这 20 道 Redis 面试题,女朋友都面上阿里了
- opencv 实现 Photoshop 亮度 对比度 调节功能
- 三大运营商物联卡哪家网络稳定