【问题标题】:Re-arranging arrays in Java在 Java 中重新排列数组
【发布时间】:2015-08-20 16:33:15
【问题描述】:

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

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]

希望这是有道理的。我怎么能这样做?

编辑:

拥有动物对象(狗、猫、老鼠),每个对象都有一系列可能的毛皮颜色。我需要切换顺序,所以我有毛皮颜色,每种颜色都有一系列可能对应的动物。

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]

【问题讨论】:

  • 你能举个真实的例子吗?用其他东西替换 datatype1_1 并发布您的代码。顺便说一句,这与 Android 无关。
  • 当你说 DataType 时,你的意思是对象,对吧?
  • 您是否可以将颜色作为对象而不是字符串?如果是这样,您可以使用继承来简化这一点。
  • 另外,您可能想给出一个更具描述性的标题。目前听起来您想在数组中移动元素。
  • 是的,颜色实际上也是对象。我只是想保持这个通用性。

标签: java arrays


【解决方案1】:

这可能是朝着正确方向的推动。我只使用字符串而不是自定义类对象来演示使用 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]

【讨论】:

    【解决方案2】:

    您所做的称为“数组转置”,是的,它不是 Java 特定的。

    但这里有一个例子:

    java multi-dimensional array transposing

    基本上,循环遍历 Array[x][y] 以更改为 Array[y][x]。您只需将其视为二维数组,而不是 2 个不同的一维数组。

    【讨论】:

    • 我不认为那是我想要做的......不确定,我添加了更多细节。我知道它与模棱两可的数据类型混淆了。
    • 是的 - 如果您将其视为一组动物为“行”,颜色为“列”,您试图将其更改为动物为“列”,颜色为“行”(和其中一些具有“0”或“null”值)
    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2012-10-20
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多