2017-08-15 69 views
2

我是java新手。我之前完成了python,并且使用循环连接两个列表或数组的元素似乎很容易。但如何用java做同样的事情?例如,我有一个多维数组: //码使用循环来连接Java中的数组元素以Python方式连接

String [][] nameAry={{"Mr.","Mrs.","Ms."},{"Jones","Patel"}}; 

//我期待的输出:

Mr. Jones, Mrs. Jones, Ms, Jones, etc. 

//我可以亲手挑选通过从索引元件做,如图Oracle文档,但我所寻找的是一个循环来完成这项工作,而不是做的:// 代码

System.out.println(nameAry[0][0]+", "+nameAry[1][0]); 

` ////那么,有没有办法把它在我的python做的方式,即,:

x=["Mr.","Mrs.","Ms."] 
y=["Jonse","patel"] 
names-[a+b for a in x for b in y] 

///这给了我以下结果:

['Mr.Jonse', 'Mr.patel', 'Mrs.Jonse', 'Mrs.patel', 'Ms.Jonse', 'Ms.patel'] 

//那么,有没有这样的事情在Java中???

+0

这就是所谓的笛卡尔积。 – shmosel

+0

只要在Python中做同样的事情:for循环执行另一个for循环。语法不同,但原理相同。 –

+0

我也这么认为。但在这里,我的目标是像对待python列表一样对多维数组做同样的事情。我的意思是,这可能吗? – user7360021

回答

1

你可以使用带索引变量的循环来访问你的数组。在这里,我使用i来循环第一维和j字符串数组的第二维,同时组装每一对并将其添加到列表中。 带有ArrayList的部分仅仅是为了方便,您还可以返回字符串或将它们添加到不同的数据结构中。希望有所帮助。

编辑:解释

ArrayList<String> list = new ArrayList<String>(); 
     String [][] nameAry={{"Mr.","Mrs.","Ms."},{"Jones","Patel"}}; 
     for(int i = 0;i<nameAry[0].length;i++) { 
      for(int j =0;j<nameAry[1].length;j++) { 
       list.add(nameAry[0][i]+nameAry[1][j]); 
      } 
     } 
+1

请解释你的答案。 –

+0

我做了,谢谢你指出我 –

+1

这是超棒的... !!这个方法很简单!我担心我不能用Java做我用python做的事情!但不同的维度应该通过不同的'for循环'和'不同的索引应该被标记为不同的'... ....优秀...我喜欢它。非常感谢。 – user7360021

1

下面是使用流的解决方案。

String [][] nameAry={{"Mr.","Mrs.","Ms."},{"Jones","Patel"}}; 
List<String> list = Arrays.stream(nameAry[0]) 
    .flatMap(x -> Arrays.stream(nameAry[1]) 
     .map(y -> x + y)) 
    .collect(Collectors.toList()); 
list.forEach(System.out::println); 

请注意,此处使用flatMap方法。它用于将第一个子数组的每个元素转换为新的数据流。新流由.map(y -> x + y)创建,即将名称连接到敬语。所有新的流都被加入。

+0

真棒!我是否为此导入任何包裹?像java.util.Arrays ??? – user7360021

+0

@ user7360021您需要的三个导入是java.util.List,java.util.Arrays和java.util.stream.Collectors。此外,如果您认为我的答案回答了您的问题,请考虑通过点击该选中标记来接受它! – Sweeper

-1

我觉得在这里使用一个二维数组作为输入是错误的。 您已在Python示例中正确使用2个数组作为输入。 所以在Java中也是这样。

笛卡尔乘积方法:

public String[] cartesianProduct(String[] first, String[] second) { 
    String[] result = new String[first.length * second.length]; 
    int resIndex=0; 

    for (int i=0; i < first.length; i++) { 
    for (int j=0; j < second.length; j++) { 
     result[resIndex] = first[i] + second[j]; 
     resIndex++; 
    } 
    } 
} 

主要方法:

public static void main(String[] args) { 
    String[] nameArr = {"Jones","Patel"}; 
    String[] prefixArr = {"Mr.","Mrs.","Ms."}; 
    String[] result = cartesianProduct(prefixArr, nameArr); 

    // Here you can print the result 
}