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

Java中ArrayList与double比较报错,求解决方法及替代方案

嘿,刚看完你的代码和遇到的报错,我来帮你理清楚问题出在哪,以及怎么搞定它~

先说说报错的原因

你遇到的Operator '>' cannot be applied to 'java.util.ArrayList>', 'double'错误,核心问题出在这段代码:

ArrayList <ArrayList <Double>> RegularReading = new ArrayList <> ();
RegularReading.add (vibReadingless100);
RegularReading.add (vibReadingabove100);
for(Double item : RegularReading) {
    if (item > vibDefReading) {
        ctx.collect (" -- ALERT Vibration Above threshold!: " + item);
    }
}

你定义的RegularReading是一个装着ArrayList的ArrayList(ArrayList<ArrayList<Double>>),所以当你用for(Double item : RegularReading)遍历的时候,这里的item其实是ArrayList<Double>类型,而不是你以为的单个Double数值,自然没法用>和double阈值做比较啦。


解决方案:修正遍历逻辑

既然RegularReading里存的是两个子列表(小于100的和大于100的),你需要先遍历外层的列表,再逐个遍历每个子列表里的Double元素:

// 先遍历外层的ArrayList,拿到每个存读数的子列表
for(ArrayList<Double> readingList : RegularReading) {
    // 再遍历子列表里的每个读数
    for(Double item : readingList) {
        if (item > vibDefReading) {
            ctx.collect (" -- ALERT Vibration Above threshold!: " + item);
        }
    }
}

额外的代码优化建议(新手友好)

我看你是Java新手,给你几个小建议让代码更规范高效:

  1. 统一变量命名风格:用小驼峰命名法(比如vibReadingLess100代替vibReadingless100),避免大小写混乱(比如viBReading1改成vibReading6更直观);
  2. 把阈值设为常量:把vibDefReading改成类常量,代码可读性更高:
    private static final double VIBRATION_THRESHOLD = 100.0;
    
  3. 避免重复创建列表:现在你把列表初始化放在while(running)循环里,每次循环都会重新生成相同的读数和列表,如果不需要动态更新读数,可以把这部分逻辑提到循环外面;
  4. 直接判断读数(更高效):如果你的需求只是区分两类读数并告警,其实没必要先分两个列表再合并检查,生成读数时直接判断就行:
    // 示例:生成随机振动读数并直接判断
    double randomVib = Math.random() * 200; // 生成0-200的随机数
    if (randomVib > VIBRATION_THRESHOLD) {
        ctx.collect("ALERT: Vibration reading " + randomVib + " exceeds threshold!");
    } else {
        ctx.collect("Normal: Vibration reading " + randomVib);
    }
    

修正后的完整代码参考

public class DataGen implements SourceFunction<String> { 
    boolean running = true; 
    // 定义阈值常量
    private static final double VIBRATION_THRESHOLD = 100.0;

    @Override 
    public void run(SourceContext<String> ctx) throws Exception { 
        try{ 
            while (running) { 
                // 生成小于100的振动读数
                ArrayList<Double> vibReadingLess100 = new ArrayList<>();
                vibReadingLess100.add(65.563456);
                vibReadingLess100.add(75.234450);
                vibReadingLess100.add(85.987653);
                vibReadingLess100.add(95.854524);
                vibReadingLess100.add(98.854524);

                // 生成大于100的振动读数
                ArrayList<Double> vibReadingAbove100 = new ArrayList<>();
                vibReadingAbove100.add(110.453456);
                vibReadingAbove100.add(120.126543);
                vibReadingAbove100.add(130.827468);
                vibReadingAbove100.add(140.082354);
                vibReadingAbove100.add(150.432356);

                // 输出正常读数
                for (int i = 0; i < 100; i++) { 
                    ctx.collect("Vibration normal Reading: " + vibReadingLess100); 
                    Thread.sleep(100); 
                } 

                // 输出警告读数
                for (int j = 0; j < 100; j++){ 
                    ctx.collect("Vibration WARNING Reading: " + vibReadingAbove100); 
                    Thread.sleep(100); 
                } 

                // 合并列表并检查阈值
                ArrayList<ArrayList<Double>> regularReading = new ArrayList<>();
                regularReading.add(vibReadingLess100);
                regularReading.add(vibReadingAbove100);

                // 修正后的遍历逻辑
                for(ArrayList<Double> readingList : regularReading) {
                    for(Double item : readingList) {
                        if (item > VIBRATION_THRESHOLD) {
                            ctx.collect(" -- ALERT Vibration Above threshold!: " + item);
                        }
                    }
                } 

                running = false; 
            } 
        } catch (Exception e){ 
            e.printStackTrace(); 
        } 
    } 

    @Override 
    public void cancel() { 
        running = false; 
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:57