我有2个字符串数组。
string [] first = {"ajunkbc","ajunkHello","adedbc","abcjunk","add","ad","a","","junk","ajunk","aajunkbb"};
String [] second = {"abc","aHello","adedbc","abcjunk","add","ad","a","","junk","a","aajunkbb"};
我希望我的merge()方法的结果是将first
数组中的每个元素与用逗号分隔的second
数组的相应元素连接起来。
以下是我的代码
private static String[] merge(String [] tests, String [] expectations){
List<String> testList = Arrays.asList(tests);
List<String> expectationsList = Arrays.asList(expectations);
List<String> retList = new ArrayList<String>();
for(String test : testList){
for(String val : expectationsList){
retList.add(test+","+val);
break;
}
}
这不起作用。我的代码出了什么问题?
答案 0 :(得分:4)
错误的是你在expectationsList
循环并在第一次迭代后突破循环:
for(String val : expectationsList){
retList.add(test+","+val);
break; //<--- breaking out of loop after first iteration each time
}
结果是你总是检索expectationsList
的第一个元素。
由于你想要的是遍历两个数组,你应该使用索引:
for (int i = 0; i < testList.size(); i++) {
retList.add(testList.get(i)+","+expectationsList.get(i));
}
另请注意,这意味着testList
的大小与expectationsList
的大小相同。如果不是这种情况,你的方法应该抛出异常。
请注意,您无需将输入数组转换为列表。你可以按原样使用它们。
private static String[] merge(String[] tests, String[] expectations) {
if (tests.length != expectations.length) {
throw new IllegalArgumentException("input not of same length");
}
String[] result = new String[tests.length];
for (int i = 0; i < tests.length; i++) {
result[i] = tests[i] + "," + expectations[i]);
}
return result;
}
Java 8解决方案:
private static String[] merge(String[] tests, String[] expectations) {
if (tests.length != expectations.length) {
throw new IllegalArgumentException("input not of same length");
}
return IntStream.range(0, tests.length).mapToObj(i -> tests[i] + "," + expectations[i]).toArray(String[]::new);
}
答案 1 :(得分:1)
您正在遍历testList
的每个成员,然后针对每个成员,遍历expectationsList
的每个成员。你想要一起遍历它们中的每一个。
你想要做的是这样的事情:
private static String[] merge(String[] tests, String[] expectations) {
String[] result = new String[tests.length];
for(int i = 0; i < tests.length; i++) {
result[i] = tests[i] + "," + expectations[i];
}
return result;
}
此代码假设tests
和expectations
具有相同的长度。您可能希望在开头检查:
if (tests.length != expectations.length) {
throw new IllegalArgumentException("tests and expectations are of different lengths")
}
注意现在如何从两个数组中获取相同索引的元素。
旁注:您可以使用for each格式迭代数组。这很好用:
String[] myStringArray = getStringArray();
for (String myString : myStringArray) {
// Do something
}
您无需转换为List即可进行迭代:)