坐标点排序组成矩形或圆形

772 阅读1分钟

今天修改一个BUG 下面是数据图形显示错误 image.png

利用下面代码对数据重新排序后图形显示正确 image.png

坐标点排序连线,不相交,成矩形或圆形。把数据切分成两份,相当于两条线,第一份数据正序。第二分数据倒序,首尾相连成矩形。

public LinkedList<LinkedHashMap<String, Object>> sort(LinkedList<LinkedHashMap<String, Object>> source) {
        // x升序排序
        Collections.sort(source, (m1,m2)-> {
            double diffX = Double.valueOf(m1.get("x").toString()) - Double.valueOf(m2.get("x").toString());
            if (diffX > 0) {
                return 1;
            }else if (diffX < 0) {
                return -1;
            }
            return 0;
        });

![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/afff7e7ae005401abb880c3fb189b17c~tplv-k3u1fbpfcp-watermark.image)
        // 切割坐标
        int middle = source.size() / 2;

        // 切割成两条线
        LinkedList<LinkedHashMap<String, Object>> line1 = new LinkedList<>();
        LinkedList<LinkedHashMap<String, Object>> line2 = new LinkedList<>();
        for(int i=0; i < source.size(); i++) {
            if (i < middle ) {
                line1.add(source.get(i));
            } else {
                line2.add(source.get(i));
            }
        }

        // 第一条线
        Collections.sort(line1, (m1,m2)-> {
            double diffX = Double.valueOf(m1.get("y").toString()) - Double.valueOf(m2.get("y").toString());
            if (diffX > 0) {
                return 1;
            }else if (diffX < 0) {
                return -1;
            }
            return 0;
        });

        // 第二条线
        Collections.sort(line2, (m1,m2)-> {
            double diffX = Double.valueOf(m1.get("y").toString()) - Double.valueOf(m2.get("y").toString());
            if (diffX > 0) {
                return -1;
            }else if (diffX < 0) {
                return 1;
            }
            return 0;
        });

        // 矩形或圆数据
        LinkedList<LinkedHashMap<String, Object>> target = new LinkedList<>();
        target.addAll(line1);
        target.addAll(line2);
        return target;
    }