You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用未排序ArrayList绘制Linear GraphView触发异常求助

解决GraphView绘制线性图时的X值排序异常问题

这个问题我之前也碰到过!原因很明确——GraphView的线性图系列要求传入的X轴数据必须严格按升序排列,你的ArrayList里的X值是乱序的,所以触发了BaseSeries里的checkValueOrder校验,直接抛出了IllegalArgumentException。

下面是具体的解决步骤:

  • 第一步:对数据列表按X值升序排序
    不管你是用自定义数据类还是GraphView自带的DataPoint,都可以通过Collections.sort来完成排序:

    如果你用自定义数据类(比如存储X、Y值的GraphData):

    // 假设你的数据类结构
    public class GraphData {
        private double x;
        private double y;
    
        public GraphData(double x, double y) {
            this.x = x;
            this.y = y;
        }
    
        public double getX() { return x; }
        public double getY() { return y; }
    }
    
    // 排序逻辑
    ArrayList<GraphData> dataList = new ArrayList<>();
    // 先往dataList中添加你的数据
    
    // 按X值从小到大排序
    Collections.sort(dataList, (d1, d2) -> Double.compare(d1.getX(), d2.getX()));
    

    如果你直接用GraphView的DataPoint:

    ArrayList<DataPoint> dataPoints = new ArrayList<>();
    // 添加数据后执行排序
    Collections.sort(dataPoints, (dp1, dp2) -> Double.compare(dp1.getX(), dp2.getX()));
    
  • 第二步:将排序后的数据传入GraphView系列
    排序完成后,再把数据转换成数组传入LineGraphSeries:

    LineGraphSeries<DataPoint> series = new LineGraphSeries<>(dataPoints.toArray(new DataPoint[0]));
    // 或者如果是自定义类,需要先转换成DataPoint数组
    // LineGraphSeries<DataPoint> series = new LineGraphSeries<>(convertToDataPoints(dataList));
    graphView.addSeries(series);
    

额外提醒:如果是动态添加数据的场景,要么确保每次新增的X值都比之前的最大值大,要么在所有数据添加完成后统一执行一次排序,这样就能彻底避免这个异常啦。

内容的提问来源于stack exchange,提问作者Saad Malhas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:41:25