【问题标题】:Sorting arrayList of Coordinates Java排序数组坐标列表Java
【发布时间】:2017-10-13 13:09:07
【问题描述】:

我的屏幕上有 7 个字母 A (X = 24, y = 27), B (X = 38, y = 27), C (X = 54, y = 26), D (X = 18, y = 59), E (X = 33, y = 58), F (X = 49, y = 58) and G (X = 63, y = 57) 当我将坐标放入它们随机输入的 ArrayList 中时,我想按照它们显示的顺序对它们进行排序,当我沿着 Y 轴向下时对它们进行排序,例如,我在Y = 27 上获取所有坐标,按X 对它们进行排序,其中最小的放在ArrayList 前面等下面是我的代码:

private static void sort(ArrayList<BoxLetter> letters){


    for(int i = 0; i < letters.size(); i++){

        for(int j = letters.size() -1; j > i; j--){

                if(letters.get(i).getCentroid().y > letters.get(j).getCentroid().y){

                    if(letters.get(i).getCentroid().x > letters.get(j).getCentroid().x){

                        BoxLetter temp = letters.get(i);
                        letters.set(i, letters.get(j));
                        letters.set(j, temp);
                        Logger.printMessage("Sorting");
                    }
               }
        }
    }
 }

当我运行我的代码时,输​​出是ADBCEFG,但我希望它输出ABCDEFG 我的问题是,如何在 Java 7 中以 ABCDEFG 的形式对列表进行排序?

【问题讨论】:

  • 你的问题是……
  • 你不清楚你在问什么。
  • 它就在那里,我希望它以 ABCDEFG 的形式输出
  • 我知道对于您提供的字母的 X、Y 数字,您希望算法将它们排序为 ABCDEFG。但是,我不清楚如何从给定的示例中获得该排序。请提供此类排序的逻辑。如果您想先通过y 订购然后x,那么 CBAGFED 是正确的输出。

标签: java sorting arraylist


【解决方案1】:

无需重新实现排序,只需让 Java 通过实现 Comparator 来为您完成繁重的工作。使用 Java 8,这应该非常优雅:

letters.sort(Comparator.comparingInt(a -> a.getCentroid().y)
                       .thenComparingInt(a -> a.getCentroid().x));

编辑:
早期的 Java 版本可能需要更多样板代码,但概念仍然相似:

Collections.sort(letters, new Comparator<BoxLetter>() {
    @Override
    public int compare(BoxLetter a, BoxLetter b) {
        int cmp = Integer.compare(a.getCentroid().y, b.getCentroid().y);
        if (cmp != 0) {
            return cmp;
        }
        return Integer.compare(a.getCentroid().x, b.getCentroid().x);
    }
}

【讨论】:

  • 很好,但我没有使用 Java 8 没有 lambda 我如何在 Java 7 中做到这一点?
  • @SandyMcCathy 同样的概念应该仍然成立,尽管代码不会那么优雅。请参阅我编辑的答案。
  • 它正在返回 CBAGFED
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2011-05-01
  • 2018-05-26
  • 2016-11-29
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2011-10-23
相关资源
最近更新 更多