我有一个包含这样的2D数组
String[][] twodarray = { { "grey", "value1", "beta" },
{ "r", "name", "gender" , "value", "Female" },
{ "r", "name", "gender", "value", "Male" },
{ "r", "name", "exp", "value", "1" },
{ "r", "name", "exp", "value", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};
我的目标是当[a] [0]和[a] [2]有两个或两个以上元素时,它将组合在一起并将这些元素组合为一个。
例如, [1] [0]和[2] [0],r和 [1] [2]和[2] [2],性别 一样。
因此,它将合并为一个,如下所示。
{ "r", "name", "gender" , "value", "Female", "Male" },
因此,我想要的输出如下
final output:
results = { { "grey", "value1", "beta" },
{ "r", "name", "gender" , "value", "Female", "Male" },
{ "r", "name", "exp", "value", "1", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};
我所拥有的如下
for (int a=0; a < twodarray.length-1; a++)
{
if ((twodarray[a][0] == twodarray[a+1][0]) && (twodarray[a][2] == twodarray[a+1][2]))
}
}
我的问题是如何将数组组合成这样?
任何帮助将不胜感激。
答案 0 :(得分:0)
您有此错误,因为在循环的最后一步,当a = 6时,您尝试获取数组的第7个元素(当twodarray[a+1][0]
时),该元素显然不存在。您应该从0到a.length-1循环,以使索引绑定。
for (int a=0; a < twodarray.length - 1; a++)
答案 1 :(得分:0)
首先,我将行收集到Map<List<String>, List<String>>
中,该行将最终值(最后一个字符串)按前缀(除了最后一个字符串之外的所有其他字符串)分组。然后,我将地图条目收集回二维字符串数组格式:
package samplejava;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SampleJava {
public static void main(String[] args) {
String[][] twodarray = { { "grey", "value1", "beta" },
{ "r", "name", "gender" , "value", "Female" },
{ "r", "name", "gender", "value", "Male" },
{ "r", "name", "exp", "value", "1" },
{ "r", "name", "exp", "value", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};
Map<List<String>, List<String>> groups;
groups = Arrays.stream(twodarray).collect(Collectors.groupingBy(
(String[] item)-> Arrays.asList(item).subList(0, item.length - 1),
Collectors.mapping(
(String[] item)-> item[item.length - 1],
Collectors.toList())));
String[][] result = groups.entrySet().stream()
.map(entry -> Stream.concat(entry.getKey().stream(),
entry.getValue().stream())
.toArray(String[]::new))
.toArray(String[][]::new);
for(String[] row: result) {
System.out.println(Arrays.toString(row));
}
}
}
但是,此方法不保留项目的原始顺序。但是您没有说那是必要的。