sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

ObjectLikeUtil 对象比较工具

2026-02-06
sybn

ObjectLikeUtil 是一个用于比较不同类型对象的工具类,提供了灵活的对象相等性判断和跨类型比较功能,支持数字、日期、集合、Map等多种数据类型的比较。

功能说明

对象相等性比较

import cn.sybn.data.ObjectLikeUtil;

// 基本相等性比较
boolean result1 = ObjectLikeUtil.like(null, null);        // true
boolean result2 = ObjectLikeUtil.like(1, 1L);             // true (数字类型自动转换)
boolean result3 = ObjectLikeUtil.like(1.1F, 1.1D);        // true (浮点数精度比较)
boolean result4 = ObjectLikeUtil.like(1.0F, 1);           // true (整数与浮点数比较)

// 集合比较
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Long> list2 = Arrays.asList(1L, 2L, 3L);
boolean result5 = ObjectLikeUtil.like(list1, list2);      // true

// Set比较(忽略顺序)
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Long> set2 = new HashSet<>(Arrays.asList(3L, 1L, 2L));
boolean result6 = ObjectLikeUtil.like(set1, set2);        // true

// Map比较(键值对比较,忽略顺序)
Map<String, Object> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", 123);
Map<String, Object> map2 = new HashMap<>();
map2.put("key2", 123L);
map2.put("key1", "value1");
boolean result7 = ObjectLikeUtil.like(map1, map2);        // true

跨类型对象比较

// 数字与字符串比较
int result1 = ObjectLikeUtil.compare(1, "1");             // 0 (相等)
int result2 = ObjectLikeUtil.compare(22, 25);             // -1 (小于)

// 日期比较
Date date1 = new Date();
Date date2 = new Date(date1.getTime() + 1000);
int result3 = ObjectLikeUtil.compare(date1, date2);       // -1 (早于)

// 日期与字符串比较
String dateStr = "2020-01-25";
int result4 = ObjectLikeUtil.compare(DayUtil.newDate(2020, 1, 22), dateStr); // -1

特殊数据类型处理

// BigDecimal精度处理
BigDecimal bd1 = new BigDecimal("1.000");
BigDecimal bd2 = new BigDecimal("1.0");
boolean result = ObjectLikeUtil.like(bd1, bd2);           // true

// 时间戳比较
Date now = new Date();
boolean result = ObjectLikeUtil.like(now.toString(), now); // true

// 数组比较
Integer[] arr1 = {1, 2, 3};
List<Integer> list = Arrays.asList(1, 2, 3);
boolean result = ObjectLikeUtil.like(arr1, list);         // true

主要方法

  • like(Object obj1, Object obj2) - 判断两个对象是否相似(相等)
  • compare(Object obj1, Object obj2) - 比较两个对象的大小关系
  • equals(Object obj1, Object obj2) - 严格相等性判断(基于compare方法)

比较规则

数字类型比较

  • 支持不同数字类型间的比较(Integer, Long, Float, Double, BigDecimal等)
  • 自动处理精度差异
  • 使用近似相等算法处理浮点数比较

日期类型比较

  • 支持 java.util.Date, java.sql.Timestamp, LocalDateTime, LocalDate 等日期类型
  • 支持日期与字符串的比较
  • 可选择是否比较毫秒级精度

集合类型比较

  • List/数组: 按顺序逐个比较元素
  • Set: 忽略顺序,去重后比较元素
  • Map: 比较键值对,忽略键的顺序

特殊规则

  • nullnull 相等
  • null 与任何非null对象不相等
  • 不同类型的对象会尝试转换后比较
  • 字符串比较使用字典序

应用场景

  • 数据验证: 验证不同来源的数据是否一致
  • 测试断言: 在单元测试中比较复杂对象
  • 数据同步: 比较数据库记录与内存对象
  • 缓存比较: 判断缓存数据是否需要更新
  • API响应验证: 比较期望结果与实际结果

注意事项

  • 集合比较时,List和数组会考虑元素顺序,而Set不会
  • Map比较时键的顺序不影响结果
  • 浮点数比较使用近似算法,避免精度问题
  • 日期字符串比较会自动解析为日期对象后再比较

Similar Posts

Comments

暂不开放评论! 可微信联系