多字段同时比较场景下如何编写compareTo方法?
Java作业实现方案
核心逻辑说明
你最初对Comparable接口和compareTo方法的认知完全正确:该方法的核心作用就是定义同类型两个实例的排序规则,本身不具备判断字符串包含关系的能力。老师的回复大概率是混淆了「匹配查询」和「结果排序」两个独立需求,你最终将compareTo仅用于匹配结果排序的逻辑是完全符合要求的。
具体代码实现
1. compareTo方法实现(用于匹配结果按字母序排序)
排序优先级可参考:先按title排序,title相同按author排序,前两者都相同按date排序,代码示例如下:
@Override public int compareTo(YourDocumentClass other) { // 优先比较标题 int titleCompareRes = this.title.compareTo(other.title); if (titleCompareRes != 0) { return titleCompareRes; } // 标题相同比较作者 int authorCompareRes = this.author.compareTo(other.author); if (authorCompareRes != 0) { return authorCompareRes; } // 前两者都相同比较日期 return this.date.compareTo(other.date); }
实现后,你将所有匹配成功的对象存入List集合,直接调用Collections.sort(匹配结果List)即可自动按上述字母序规则完成排序,和演示示例效果一致。
2. match方法实现(查询匹配逻辑)
match方法不需要依赖compareTo实现,直接判断三个成员变量是否包含查询字符串即可,代码示例如下:
public boolean match(String query) { // 空查询默认返回全匹配,可根据作业要求调整规则 if (query == null || query.trim().isEmpty()) { return true; } // 三个字段任意一个包含查询字符串即判定匹配成功 return this.title.contains(query) || this.author.contains(query) || this.date.contains(query); }
如果作业要求必须在match相关逻辑中调用compareTo,唯一符合要求的场景是在排序匹配结果的环节调用,无需强行将匹配逻辑和compareTo绑定。
内容的提问来源于stack exchange,提问作者Rachel C
相关产品推荐
相关产品推荐

