【问题标题】:Sort an ArrayList of Points in page line order按页面行顺序对点的 ArrayList 进行排序
【发布时间】:2018-01-31 14:20:24
【问题描述】:

我需要按页面行顺序订购一个 ArrayList of Points。假设这些点为文本矩形的 minX 和 minY。

说我有以下几点

点(100,10), 点(110, 20), 点(125, 5), 点(130, 10)

排序后的顺序应与页面订单项对齐

即点(125, 5), 点(100,10), 点(130, 10), 点(110, 20)

我试图先按 Y 坐标对点进行排序,然后再按 X 坐标进行排序

public int compare(final Point a, final Point b) {
    if (a.y() < b.y()) {
        return -1;
    }else if (a.y() > b.y()) {
        return 1;
    }else {
        return 0;
    }
}

public int compare(final Point a, final Point b) {
    if (a.x() < b.x()) {
        return -1;
    }else if (a.x() > b.x()) {
        return 1;
    }else {
        return 0;
    }
}

下面是我现在得到的订单

Line = 0.00 2450 00 SewiceTax @14 on are,总计 2450 卢比

线 = Swachh Bharat Cass @ O 50 42':

线 = Knshu Kaiyan Cass @ 0'50 “5

行 = 少预付

行 = 2450 GD 应付余额

预期是

Line = Sub Total 2450 Only 0.00 2450 00INR SewiceTax @14 on are,

【问题讨论】:

  • 你的尝试?显示您尝试过的代码。
  • 你试过了吗?我确信有一个 SO question 已经涵盖了如何为点类创建客户比较器,以便在对点列表进行排序时使用。
  • 很高兴看到您已经尝试过,我们不是来为您编程算法^^
  • 在 Point 类中使用比较器

标签: java sorting points


【解决方案1】:

这应该适合你。先按 Y 坐标排序,再按 X 坐标排序。

Point p1 = new Point(12,  15);
Point p2 = new Point(13,  12);
Point p3 = new Point(14,  15);

List<Point> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);

Comparator<Point> comp = new Comparator<Point>() {
    @Override
    public int compare(Point p1, Point p2) {
        return p2.y  == p1.y ? p2.x -p1.x : p2.y-p1.y;
    }
};
list.sort(comp);

【讨论】:

  • 看起来很有希望。我会检查并告诉你。可能是我必须改变的顺序.. np 伙计,我会投票。有些人就是为了这个……
【解决方案2】:

使用Comparator,并根据您的用例覆盖 compare()。 这些链接将为您提供帮助

How to sort ArrayList using Comparator?

How to use Comparator in Java to sort

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 2012-05-30
    • 2019-02-03
    • 2019-08-02
    • 2013-10-28
    • 2011-10-22
    • 2014-06-08
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多