TreeMap使用问题

最近项目用到了treeMap做排序并分类计数,当order字段相同时出现分组混乱:

代码:

public static Map<String, List<KtIndicatorResult>> getresultTreeMap() {
		Map<String, List<KtIndicatorResult>> resultMap = new TreeMap<>(new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				// 截取key:INDICATOR_GROUP + '_' + GROUP_ORDER里面的GROUP_ORDER
				Integer com1 = Integer.valueOf(o1.substring(o1.lastIndexOf(SEPARATER2) + 1,o1.lastIndexOf(KtUtils.SEPARATER1)));
				Integer com2 = Integer.valueOf(o2.substring(o2.lastIndexOf(SEPARATER2) + 1,o2.lastIndexOf(KtUtils.SEPARATER1)));
				return com1.compareTo(com2);
			}
		});
		return resultMap;
	}

问题:

当com1.compareTo(com2) 返回为0 时,分类出现问题,会把com1和com2对应的key划分到同一类中去:

解决:

查看TreeMap源码发现:

1 : comparator.compare(k1, k2) 返回值小于0 ,则把值放在左子树,相当于排在前面.
2 : comparator.compare(k1, k2) 返回值大于0 ,则把值放在右子树,相当于排在后面.
3 : comparator.compare(k1, k2) 返回值等于0 ,把k1和k2当成相同key,并替换值。

最后把基础数据中每个分组对应的order值设为不同,解决问题,后期再考虑其他方式.

参考:

https://www.cnblogs.com/WangJinYang/p/10331381.html

该资源主要涵盖 STM32 微控制器通过 SPI 总线与 ICM-42688-P 六轴 IMU 的驱动程序开发(含初始化、FIFO 数据读取与解析),提供基于 HAL 库的示例代码,目标是实现 IMU 数据的快速集成、高精度采集与可扩展处理,需注意 SPI 速率匹配、温漂补偿及 FIFO 溢出处理,可扩展至九轴融合、姿态解算和惯性导航等方向。STM32微控制器是一种广泛使用的32位ARM Cortex-M系列处理器,以其高性能、低功耗和丰富的集成外设而闻名。在物联网、工业自动化、汽车电子等领域应用广泛。IMU(惯性测量单元)是一种设备,通常包括加速度计、陀螺仪和磁力计,用于测量和报告设备的特定动态参数,如速度、方向和重力。ICM-42688-P是InvenSense公司生产的一款高性能的六轴惯性测量单元,它结合了加速度计和陀螺仪,广泛用于需要高精度、低功耗和小尺寸的应用场景。本资源聚焦于如何使用STM32微控制器通过SPI(Serial Peripheral Interface)总线与ICM-42688-P进行通信。SPI是一种常见的高速、全双工、同步通信总线,它允许微控制器与外围设备进行数据交换。在本资源中,我们主要关注于初始化ICM-42688-P,以及如何读取其FIFO(First In, First Out)缓冲区中的数据。通过使用HAL(硬件抽象层)库,开发者可以更容易地编写代码,因为HAL库提供了一系列预定义的函数和结构,用于简化与硬件外设的交互。本资源提供的示例代码展示了如何实现IMU数据的快速集成和高精度采集,同时也考虑了数据处理的可扩展性。在实际应用中,开发者可以利用这些数据进行进一步的处理,例如九轴融合算法、姿态解算或惯性导航。在处理IMU数据时,有几个关键点需要特别注意。首先是SPI速率匹配,即确保STM32微控制器和ICM-42688-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值