我设置了这样的对象,来自服务的数据:
DataType1_1 has array [DataType2_1, DataType2_2, DataType2_3]
DataType1_2 has array [DataType2_2, DataType2_3]
我希望他们重新安排,所以我有这样的对象:
DataType2_1 has array [DataType1_1]
DataType2_2 has array [DataType1_1, DataType1_2]
DataType2_3 has array [DataType1_1, DataType1_2]
希望这是有道理的。我怎么能这样做?
编辑:
拥有Animal对象(狗,猫,老鼠),每个对象都有一系列可能的毛色。我需要切换顺序,所以我有毛皮颜色,每个都有一系列可能的动物对应。
Dog has array [Brown, White, Black]
Cat has array [Brown, White, Red]
Mouse has array [White, Black]
需要这个:
Brown has array [Dog, Cat]
White has array [Dog, Cat, Mouse]
Red has array [Cat]
Black has array [Dog, Mouse]
答案 0 :(得分:1)
您正在做的事情被称为“数组转置”,是的,它不是特定于Java的。
但这是一个例子:
java multi-dimensional array transposing
基本上,循环通过Array [x] [y]更改为Array [y] [x]。您只需将其视为二维数组而不是两个不同的一维数组。
答案 1 :(得分:0)
这可能会推动正确的方向发展。我只使用字符串而不是自定义类对象来演示使用Java 8中的Streams
重新排列数组。
public static void main(String[] args) throws Exception {
String[] Dog = {"Brown", "White", "Black"};
String[] Cat = {"Brown", "White", "Red"};
// Join the arrays together to get distinct values
String[] join = new String[Dog.length + Cat.length];
System.arraycopy(Dog, 0, join, 0, Dog.length);
System.arraycopy(Cat, 0, join, Dog.length, Cat.length);
Object[] distincts = Arrays.stream(join).distinct().toArray();
// Rearrange data into a Map
Map<String, List<String>> rearranged = new HashMap();
for (Object obj : distincts) {
rearranged.put(obj.toString(), new ArrayList());
if (Arrays.stream(Dog).anyMatch(dt -> dt.contentEquals(obj.toString()))) {
rearranged.get(obj.toString()).add("Dog");
}
if (Arrays.stream(Cat).anyMatch(dt -> dt.contentEquals(obj.toString()))) {
rearranged.get(obj.toString()).add("Cat");
}
}
// Print rearranged results
rearranged.keySet().stream().forEach((key) -> {
System.out.println(key + " has array " + rearranged.get(key));
});
}
结果:
Red has array [Cat]
Brown has array [Dog, Cat]
White has array [Dog, Cat]
Black has array [Dog]