用Java重新安排数组

时间:2015-06-05 16:25:11

标签: java arrays

我设置了这样的对象,来自服务的数据:

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]

2 个答案:

答案 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]