用subMap()筛选价格区间需以数值型价格为键(推荐Double或BigDecimal),调用subMap(fromKey,true,toKey,true)获取闭区间,返回SortedMap视图,修改同步影响原TreeMap。

用 subMap() 筛选价格区间,核心是把价格设为键、商品对象设为值,TreeMap 会自动按价格排序,再调用方法直接切出对应范围。
确保键是数值型且可比较
TreeMap 的键必须能自然排序(如 Integer、Double),不能用字符串存价格(比如 "199"),否则按字典序比较会出错("20" > "199")。推荐用 Double 或 BigDecimal 存价格,避免浮点误差影响边界判断。
调用 subMap() 的两种常用写法
subMap(fromKey, toKey) 返回的是左闭右开区间 [fromKey, toKey);如果需要闭区间 [fromKey, toKey],可用三参数版本:
-
subMap(fromKey, true, toKey, true)→ 包含两端 -
subMap(fromKey, false, toKey, false)→ 都不包含
例如查价格在 100 到 500 元(含)之间的商品:
SortedMap<double product> range = priceMap.subMap(100.0, true, 500.0, true);</double>
注意边界值存在性不影响结果
即使 100.0 或 500.0 这两个价格在 map 中不存在,subMap() 仍会返回范围内所有实际存在的键值对。它只看键的大小关系,不依赖端点是否真实存在。但需确保 fromKey ≤ toKey,否则返回空视图。
配合遍历或转集合使用
返回的是 SortedMap 视图,修改它会同步影响原 TreeMap。如需独立副本,可构造新 map:
- 只取商品列表:
new ArrayList(range.values()) - 保留键值对:
new TreeMap(range) - 流式处理:
range.entrySet().stream()...










