JAVA动态维度笛卡尔积输出的实现

 更新时间:2024年02月18日 09:35:37   作者:118路司机  
本文主要介绍了JAVA动态维度笛卡尔积输出的实现,通过动态生成笛卡尔积,可以方便地处理多维数据集,提高数据处理效率,具有一定的参考价值,感兴趣的可以了解一下

需求

有若干个数据序列,把这些数据序列的组合全部遍历输出,比如提供
[“A”, “B”, “C”],[“I”, “II”], [“1”, “2”, “3”, “4”] 三个序列,能够输出以下结果:

A-I-1
A-I-2
A-I-3
A-I-4

C-II-2
C-II-3
C-II-4

思路

如果是是固定维度,有几个维度,for循环几遍即可,但是如果是不定序列,则遍历的时候需要指定前置维度和后置维度进行计算从而遍历到所有的数据。

public void test() {
        // 定义数据
        List<List<String>> datList = new ArrayList<>();
        datList.add(List.of("A", "B", "C"));
        datList.add(List.of("I", "II"));
        datList.add(List.of("1", "2", "3", "4"));

        // 定义总行数
        int row = datList.stream().map(List::size).reduce((a, b) -> a * b).get();

        // 定义总列数
        int size = datList.size();

        // 定义数据矩阵
        Object[][] matrix = new Object[row][size];

        // 前置维度
        int prevDim = 1;

        // 遍历所有维度数据
        for (int i = 0; i < datList.size(); i++) {

            // 当前数据
            List<String> currDat = datList.get(i);

            // 当前数据长度
            int currDatLen = currDat.size();

            // 当前维度
            int currDim = row / prevDim;

            // 后置维度
            int nextDim = currDim / currDatLen;

            // 根据前后维度进行矩阵填充
            for (int j = 0; j < currDatLen; j++) {
                Object data = currDat.get(j);
                for (int k = 0; k < prevDim; k++) {
                    for (int m = 0; m < nextDim; m++) {
                        matrix[currDim * k + nextDim * j + m][i] = data;
                    }
                }
            }
            prevDim = prevDim * currDatLen;
        }

        // 输出结果
        for (int i = 0; i < matrix.length; i++) {
            System.out.println(String.join("-", Arrays.stream(matrix[i]).map(Object::toString).collect(Collectors.toList())));
        }
    }

输出结果

A-I-1
A-I-2
A-I-3
A-I-4
A-II-1
A-II-2
A-II-3
A-II-4
B-I-1
B-I-2
B-I-3
B-I-4
B-II-1
B-II-2
B-II-3
B-II-4
C-I-1
C-I-2
C-I-3
C-I-4
C-II-1
C-II-2
C-II-3
C-II-4

 到此这篇关于JAVA动态维度笛卡尔积输出的实现的文章就介绍到这了,更多相关JAVA动态笛卡尔积内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈java Properties类的使用基础

    浅谈java Properties类的使用基础

    下面小编就为大家分享一篇浅谈java Properties类的使用基础,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 利用Java如何获取IP与机器名方法示例

    利用Java如何获取IP与机器名方法示例

    在开发工作中,我们常常需要获取客户端的IP。下面这篇文章主要给大家介绍了关于利用Java如何获取IP与机器名的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Hibernate核心类和接口的详细介绍

    Hibernate核心类和接口的详细介绍

    今天小编就为大家分享一篇关于Hibernate核心类和接口的详细介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 详解Spring Security的formLogin登录认证模式

    详解Spring Security的formLogin登录认证模式

    对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要Spring Security支持我们自己定制登录页面,也就是本文给大家介绍的formLogin模式登录认证模式,感兴趣的朋友跟随小编一起看看吧
    2019-11-11
  • Mybatis集成Spring的实例代码_动力节点Java 学院整理

    Mybatis集成Spring的实例代码_动力节点Java 学院整理

    这篇文章主要介绍了Mybatis集成Spring的实例代码,需要的朋友可以参考下
    2017-09-09
  • Java实现求小于n的质数的3种方法

    Java实现求小于n的质数的3种方法

    这篇文章主要介绍了Java实现求小于n的质数的3种方法,本文给出了根据定义去求解、平方根、找规律三种解法,需要的朋友可以参考下
    2015-03-03
  • 详解Java去除json数据中的null空值问题

    详解Java去除json数据中的null空值问题

    这篇文章主要介绍了详解Java去除json数据中的null空值问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java如何读取配置文件并赋值静态变量

    Java如何读取配置文件并赋值静态变量

    这篇文章主要介绍了Java如何读取配置文件并赋值静态变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot设置HTTP代理访问

    SpringBoot设置HTTP代理访问

    本文主要介绍了SpringBoot在私有服务器通过代理访问公网的配置方法,涉及WebClient和RestTemplate两种客户端的代理设置,帮助实现跨服务器网络请求
    2025-06-06
  • Java通过httpclient比较重定向和请求转发

    Java通过httpclient比较重定向和请求转发

    这篇文章主要介绍了Java通过httpclient比较重定向和请求转发,HttpClient 4.x 版本,get请求方法会自动进行重定向,而post请求方法不会自动进行重定向,需要的朋友可以参考下
    2023-04-04

最新评论