如何基于数组指定索引值筛选数据并存入TreeMap?
问题分析与解决方案
核心问题
你的代码逻辑完全错误,问题出在这两处:
- 用
Arrays.toString(r_data_double_arr)把数组转成字符串后,调用a.indexOf(2)是在找字符'2'在字符串里的位置,根本不是获取数组索引2的元素值,这和你要判断的“第三个元素是否大于50”完全不沾边。 - 没有处理Double数组的空值问题:初始化的
Double数组元素默认是null,直接访问r_data_double_arr[2]可能触发空指针异常。
修正后的代码
// 假设你已初始化日期格式化实例,示例: SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private Double r_data_double_arr[] = new Double[89]; Map<String, Object> rightDataDict = new TreeMap<>(); Map<String, Object> rightDataDictCon = new TreeMap<>(); Date date = new Date(); // 直接访问数组索引2的元素,先判空再判断数值 Double targetValue = r_data_double_arr[2]; if (targetValue != null && targetValue > 50) { // 按需选择存储原数组或字符串形式的数组 rightDataDict.put(formatter.format(date), r_data_double_arr); // 若需存字符串形式,替换为: // rightDataDict.put(formatter.format(date), Arrays.toString(r_data_double_arr)); }
关键说明
- 直接通过
数组[索引]访问目标元素:r_data_double_arr[2]就是你要判断的第三个元素。 - 增加空值判断:
Double是包装类型,数组初始化后元素为null,先判断targetValue != null可避免空指针异常。 - 日期格式化直接用
formatter.format(date)即可,无需额外套String.valueOf()。
内容的提问来源于stack exchange,提问作者stack offer
相关产品推荐
相关产品推荐

