栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

排列组合的运算(java全排列算法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排列组合的运算(java全排列算法)

排列组合运算,大家都不陌生吧:如果有3个集合来作排列组合运算,每个集合的元素个数分别为n1、n2、n3,则结果集的元素个数为n1 * n2 * n3。

我的实现思路是:

1)遍历每个集合

2)如果是第1次遍历,则直接把元素放入结果集中;反之,则把上次的结果集缓存一份,然后给缓存合集中的每个元素作后续拼接。代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class MyCollectionUtils {


    
    public static  List combine(List> list, Function mapper, String connectors) {
        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }

        //结果集
        List resList = new ArrayList<>();
        //缓存上次的结果集,用来拼接新的元素
        List cacheList = null;

        for (int i = 0; i < list.size(); i++) {
            if (i == 0) {
                resList.addAll(list.get(i).stream().map(mapper).collect(Collectors.toList()));
            } else {
                cacheList = new ArrayList<>(resList);

                List ts = list.get(i);
                for (int j = 0; j < ts.size(); j++) {
                    T t = ts.get(j);
                    if (j == 0) {
                        resList = resList.stream().map(e -> e + connectors + mapper.apply(t)).collect(Collectors.toList());
                    } else {
                        resList.addAll(cacheList.stream().map(e -> e + connectors + mapper.apply(t)).collect(Collectors.toList()));
                    }

                }
            }
        }

        return resList;
    }

    public static void main(String[] args) {
        List list = new ArrayList();

        List list1 = new ArrayList();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List list2 = new ArrayList();
        list2.add(4);
        list2.add(5);

        List list3 = new ArrayList();
        list3.add(6);
        list3.add(7);
        list3.add(8);

        list.add(list1);
        list.add(list2);
        list.add(list3);

        List combine = combine(list, (e -> e.toString()), ",");
        for (String str : combine) {
            System.out.println(str);
        }
    }
}

程序输出:

1,4,6
2,4,6
3,4,6
1,5,6
2,5,6
3,5,6
1,4,7
2,4,7
3,4,7
1,5,7
2,5,7
3,5,7
1,4,8
2,4,8
3,4,8
1,5,8
2,5,8
3,5,8

明显符合预期,over~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号