JAVA集合交叉遍历的问题

发布于 2022-09-11 18:35:19 字数 217 浏览 12 评论 0

比如有5个list:
list A = {a,b,c}
list B = {d,e,f}
list c = {x,y,z,k,l}
list c = {1,2}
list c = {8,9,0,5}

要将几个list的内容进行组合,结果为 {adx18},{bey29},{efz0},{k5},{l}依次类推,实际情况可能会有更多的 list,list里元素也会更多

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挽你眉间 2022-09-18 18:35:20

参考笛卡尔积运算。

傲娇萝莉攻 2022-09-18 18:35:20

public static List<String> combination(List<List<String>> groups) {

    if (invalid(groups) || invalid(groups.get(0))) {
        return null;
    }
    List<String> combine = groups.get(0);
    for (int i = 1; i < groups.size(); i++) {
        combine = cartesianProduct(combine, groups.get(i));
        if (combine == null) {
            return null;
        }
    }
    return combine;
}

/**
 * 两个集合元素的组合
 *
 * @param c1 集合1
 * @param c2 集合2
 * @return 组合结果
 */
public static List<String> cartesianProduct(List<String> c1, List<String> c2) {
    if (invalid(c1) || invalid(c2)) {
        return null;
    }
    List<String> combine = new ArrayList<>();
    for (int index = 0,size = c1.size(); index < size; index++) {
        String s = "";
        if (index<=c2.size()-1){
             s = c2.get(index);
        }
        combine.add(String.format("%s%s", s, c1.get(index)));

    }
    return combine;
}

/**
 * 验证集合是否无效
 *
 * @param c 集合
 * @return true 无效
 */
private static boolean invalid(List<?> c) {
    return c == null || c.isEmpty();
}

public static void main(String[] args) {
    List<String> c1 = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));
    List<String> c2 = new ArrayList<>(Arrays.asList("1", "2", "3", "4"));
    List<String> c3 = new ArrayList<>(Arrays.asList("I", "II", "III"));
    List<List<String>> collections = new ArrayList<>();
    collections.add(c1);
    collections.add(c2);
    collections.add(c3);
    List<String> combine = combination(collections);
    System.out.println(combine);
    System.out.println("actual count: " + (combine == null ? 0 : combine.size()));
}

输出结果:[I1a, II2b, III3c, 4d]
        actual count: 4
别靠近我心 2022-09-18 18:35:19
package com.ui;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class Iter  {

    
    public static int getMaxSize(List<List<String>> list){
        if(null == list || list.size() <= 0){
            return 0;
        }
        int max = 0;
        for(List<String> cur : list){
            if(cur.size() > max){
                max = cur.size();
            }
        }
        return max;
    }
    
    public static void main(String[] args) {
        
        List<String> a = new ArrayList<String>(Arrays.asList(new String[]{"a","b","c"}));
        List<String> b = new ArrayList<String>(Arrays.asList(new String[]{"d","e","f"}));
        List<String> c = new ArrayList<String>(Arrays.asList(new String[]{"x","y","z","k","l"}));
        List<String> d = new ArrayList<String>(Arrays.asList(new String[]{"1","2"}));
        List<String> e = new ArrayList<String>(Arrays.asList(new String[]{"8","9","0","5"}));
        List<List<String>> groupList = new ArrayList<List<String>>();
        groupList.add(a);
        groupList.add(b);
        groupList.add(c);
        groupList.add(d);
        groupList.add(e);
        int index = getMaxSize(groupList);    
        for(int i = 0;i < index;i++){
            StringBuilder builder = new StringBuilder();
            for(List<String> group : groupList){
                if(group.size() > i){
                    builder.append(group.get(i));
                }
            }
            System.out.println(builder.toString());
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文