代码之家  ›  专栏  ›  技术社区  ›  David Brossard

如何在Java中求字符串矩阵的乘积?

  •  1
  • David Brossard  · 技术社区  · 7 年前

    我有一个未知数量的字符串[]。每个阵列的大小可以不同。

    我想创建每个数组中每个值的“乘积”(或串联)。

    实例

    public static void main(String[] args) {
        String[] x = {"a", "b", "c"};
        String[] y = {"d", "e", "f", "g"};
        String[] z = {"h", "i"};
        ...
    }
    

    所需输出

    adh, adi, aeh, aei, ...

    我想我必须通过递归来处理这个问题,因为我不知道我有多少数组。但即便如此,我还是很难看到结果会存储在哪里。

    有什么提示吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   David Brossard    7 年前

    好的,我找到路了

    package eu.webfarmr;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Dummy {
        public static void main(String[] args) {
            String[] x = {"a", "b", "c"};
            String[] y = {"d", "e", "f", "g"};
            String[] z = {"h", "i"};
            ArrayList<String[]> list = new ArrayList<String[]>();
            list.add(x);
            list.add(y);
            list.add(z);
            List<String> result = product(list);
            for (String r : result){
                System.out.println(r);
            }
        }
    
        private static ArrayList<String> product(ArrayList<String[]> items){
            ArrayList<String> result = new ArrayList();
            if (items!=null && items.size()>0){
                String[] currentItem = items.get(0);
                ArrayList<String[]> clone = (ArrayList<String[]>) items.clone();
                clone.remove(0);
                for (String item : currentItem){                
                    ArrayList<String> product = product(clone);
                    if (product!=null && product.size()>0){
                        for (String p : product){
                            result.add(item+p);
                        }
                    } else {
                        result.add(item);
                    }
                }
            }
            return result;
        }
    }
    

    此代码将输出

    adh
    adi
    aeh
    aei
    afh
    afi
    agh
    agi
    bdh
    bdi
    beh
    bei
    bfh
    bfi
    bgh
    bgi
    cdh
    cdi
    ceh
    cei
    cfh
    cfi
    cgh
    cgi
    
        2
  •  -1
  •   Pramod    7 年前

    private static List<String> multiply(List<String> x, List<String> y) {
        List<String> results = new ArrayList<>();
        x.forEach(s1 -> y.forEach(s2 ->
                        results.add(s1+s2 )
                )
        );
        return results;
    }
    
    public static void main(String[] args) {
        String[] x = {"a", "b", "c"};
        String[] y = {"d", "e", "f", "g"};
        String[] z = {"h", "i"};
        List<List<String>> inputs = Arrays.asList(Arrays.asList(x),Arrays.asList(y),Arrays.asList(z));
        List<String> results = Arrays.asList("");
    
        for (int i = 0; i < inputs.size(); i++) {
            results = multiply(results, inputs.get(i));
        }
        System.out.println("results = " + results);
    

    }

    cdi ceh cei cfh cfi cgh cgi