JAVA動態(tài)維度笛卡爾積輸出的實現(xiàn)
需求
有若干個數(shù)據(jù)序列,把這些數(shù)據(jù)序列的組合全部遍歷輸出,比如提供
[“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循環(huán)幾遍即可,但是如果是不定序列,則遍歷的時候需要指定前置維度和后置維度進行計算從而遍歷到所有的數(shù)據(jù)。
例
public void test() {
// 定義數(shù)據(jù)
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"));
// 定義總行數(shù)
int row = datList.stream().map(List::size).reduce((a, b) -> a * b).get();
// 定義總列數(shù)
int size = datList.size();
// 定義數(shù)據(jù)矩陣
Object[][] matrix = new Object[row][size];
// 前置維度
int prevDim = 1;
// 遍歷所有維度數(shù)據(jù)
for (int i = 0; i < datList.size(); i++) {
// 當前數(shù)據(jù)
List<String> currDat = datList.get(i);
// 當前數(shù)據(jù)長度
int currDatLen = currDat.size();
// 當前維度
int currDim = row / prevDim;
// 后置維度
int nextDim = currDim / currDatLen;
// 根據(jù)前后維度進行矩陣填充
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動態(tài)維度笛卡爾積輸出的實現(xiàn)的文章就介紹到這了,更多相關JAVA動態(tài)笛卡爾積內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Spring Security的formLogin登錄認證模式
對于一個完整的應用系統(tǒng),與登錄驗證相關的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認證模式,感興趣的朋友跟隨小編一起看看吧2019-11-11
Mybatis集成Spring的實例代碼_動力節(jié)點Java 學院整理
這篇文章主要介紹了Mybatis集成Spring的實例代碼,需要的朋友可以參考下2017-09-09
詳解Java去除json數(shù)據(jù)中的null空值問題
這篇文章主要介紹了詳解Java去除json數(shù)據(jù)中的null空值問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
Java通過httpclient比較重定向和請求轉發(fā)
這篇文章主要介紹了Java通過httpclient比較重定向和請求轉發(fā),HttpClient?4.x?版本,get請求方法會自動進行重定向,而post請求方法不會自動進行重定向,需要的朋友可以參考下2023-04-04

