java 组合怎么用_怎么用java代码生成组合的可能项?

正好原来做过,随便改了一下,递归方式实现,规格随便加,完全满足你的需求。

/**

* 组合,递归实现

*

* @param src 数组对象

* @param begin 从源数组中的此索引处取得一个数据并存入result中

* @param number 组合数量

* @param result 一组组合数据

* @param resultIdx result中索引变更,即每组组合数据共用result对象,仅改变此索引

* @param action 一组组合数据的访问器

*/

private static void combine(String[][] src, int begin, int number, String[][] result, int resultIdx, Consumer action) {

if (number == 0) {

action.accept(result);

return;

}

if (begin >= src.length) {

return;

}

boolean flag = true;

if(resultIdx > 0) {

String[] prevResult = result[resultIdx - 1];

String[] currSrc = src[begin];

if(prevResult[0].equals(currSrc[0])) {

flag = false;

}

}

result[resultIdx] = src[begin];

if(flag) {

resultIdx++;

combine(src, begin + 1, number - 1, result, resultIdx, action);

resultIdx--;

combine(src, begin + 1, number, result, resultIdx, action);

} else {

combine(src, begin + 1, number, result, resultIdx, action);

}

}

public static void main(String[] args) {

String[][] arr = new String[][]{

{"颜色", "红"},

{"颜色", "黄"},

{"尺码", "大"},

{"尺码", "中"},

{"尺码", "小"},

{"材质", "普通"},

{"材质", "高级"},

{"成份", "80%棉、20%聚酯纤维"},

{"成份", "100%棉"},

{"成份", "100%聚酯纤维"},

};

int spec_type_size = 0;

String spec_type = null;

for(int i = 0; i < arr.length; i++) {

if(spec_type == null || !arr[i][0].equals(spec_type)) {

spec_type = arr[i][0];

spec_type_size++;

}

}

combine(arr, 0, spec_type_size, new String[spec_type_size][], 0, (String[][] v) -> {

StringBuilder sb = new StringBuilder();

for(int i = 0; i < v.length; i++) {

sb.append(Arrays.toString(v[i]));

if(i != v.length - 1) {

sb.append(", ");

}

}

System.out.println(sb);

});

}

结果

[颜色, 红], [尺码, 大], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 大], [材质, 普通], [成份, 100%棉]

[颜色, 红], [尺码, 大], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 红], [尺码, 大], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 大], [材质, 高级], [成份, 100%棉]

[颜色, 红], [尺码, 大], [材质, 高级], [成份, 100%聚酯纤维]

[颜色, 红], [尺码, 中], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 中], [材质, 普通], [成份, 100%棉]

[颜色, 红], [尺码, 中], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 红], [尺码, 中], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 中], [材质, 高级], [成份, 100%棉]

[颜色, 红], [尺码, 中], [材质, 高级], [成份, 100%聚酯纤维]

[颜色, 红], [尺码, 小], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 小], [材质, 普通], [成份, 100%棉]

[颜色, 红], [尺码, 小], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 红], [尺码, 小], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 红], [尺码, 小], [材质, 高级], [成份, 100%棉]

[颜色, 红], [尺码, 小], [材质, 高级], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 大], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 大], [材质, 普通], [成份, 100%棉]

[颜色, 黄], [尺码, 大], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 大], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 大], [材质, 高级], [成份, 100%棉]

[颜色, 黄], [尺码, 大], [材质, 高级], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 中], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 中], [材质, 普通], [成份, 100%棉]

[颜色, 黄], [尺码, 中], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 中], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 中], [材质, 高级], [成份, 100%棉]

[颜色, 黄], [尺码, 中], [材质, 高级], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 小], [材质, 普通], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 小], [材质, 普通], [成份, 100%棉]

[颜色, 黄], [尺码, 小], [材质, 普通], [成份, 100%聚酯纤维]

[颜色, 黄], [尺码, 小], [材质, 高级], [成份, 80%棉、20%聚酯纤维]

[颜色, 黄], [尺码, 小], [材质, 高级], [成份, 100%棉]

[颜色, 黄], [尺码, 小], [材质, 高级], [成份, 100%聚酯纤维]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值