如何比较java中的多个类?

2024-02-16

现在,我已经编写了对整数和字符串数组进行排序的比较器。从代码中可以看出,如果两个类不相同,则 String 类将采用大于值。但是,这仅允许两个类。如果我想向数组添加另一个基本类型(例如 Float)怎么办?我必须向 if-else 语句添加更多代码。有没有一种方法可以实现比较,而不必为我想要比较的每个附加类添加语句?

import java.util.Arrays;
import java.util.Comparator;

public class SampleComparator implements Comparator<Object> {

public static void main(String[] args) {
    Object[] inputData = { new String("pizza"), new Integer(0),
            new String("apples"), new Integer(5), new String("pizza"),
            new Integer(3), new Integer(7), new Integer(5) };
    Arrays.sort(inputData, new SampleComparator());
    System.out.println(Arrays.asList(inputData));
}

public int compare(Object o1, Object o2) {
    if (o1.getClass().equals(o2.getClass())) {
        return ((Comparable)o1).compareTo((Comparable)o2);
    } else {
        if(o1.getClass().getCanonicalName().equals("java.lang.String")){
            return 1;
        } else {
            return -1;
        }
    }

}

 }

output:

[0, 3, 5, 5, 7, apples, pizza, pizza]

我必须向 if-else 语句添加更多代码。有没有一种方法可以实现比较,而不必为我想要比较的每个附加类添加语句?

您可能希望使用同一类的本机比较器来比较同一类的对象,然后对类进行某种排序(例如,所有整数之前的所有浮点数之前的所有字符串)。

因此,您可以先比较类,然后如果相等则比较对象。

public int compare(Object o1, Object o2) {
    // maybe some null checks here?

    if (o1.getClass().equals(o2.getClass())) {
        // and what if they are not Comparable ?
        return ((Comparable)o1).compareTo((Comparable)o2);
    } else {
        // for example compare by class name alphabetically
        // another idea would be a map with all supported classes,
        // assigning them an order

        return o1.getClass().getName().compareTo(o2.getClass().getName());
    }

}

很难对未知类别进行有意义的比较。您可能需要制定受支持的类的列表以及您希望如何比较它们的明确规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较java中的多个类? 的相关文章

随机推荐

  • 如何从 Haskell 的 read 函数中捕获 no parse 异常?

    在我的 Haskell 程序中 我想使用以下命令读取用户给出的值getLine功能 然后我想使用read函数将此值从字符串转换为适当的 Haskell 类型 我怎样才能捕捉到抛出的解析错误read函数并要求用户重新输入值 我是否正确地认为这
  • 如何检查 iOS 中的视图层次结构?

    是否有一个 GUI 工具可以检查 iOS 应用程序的视图层次结构 我正在考虑 Webkit 的网络检查器或类似工具 我正在寻找调试布局问题 例如视图的位置或大小错误 或者子视图未正确包含在其父视图中 目前 我必须添加断言来手动测试这些不同的
  • ICollectionView 取消当前更改

    我正在寻找一种方法来根据单击的项目取消 CurrentChanging 事件 在我的应用程序中 我使用 ICollectionView 来保存视图模型列表 这些视图模型在选项卡控件中呈现为选项卡项 对于特定的视图模型 我需要在激活视图模型之
  • 使用 sqlite 在 django 上实现不区分重音的搜索

    这个问题与我之前的问题有关重音不敏感搜索 django sqlite https stackoverflow com questions 31327019 accent insensitive search django sqlite 正如
  • a* 与 (a*)* 相同吗?

    快速提问 如果a是一个正则表达式 那么这是真的吗a a Is a 有效的表达 如果是 那么任何人都可以解释为什么它与a 我很抱歉在这里提问 但我无法通过谷歌找到任何东西 Yes a a 是一样的 两者都生成相同的语言 即字符串包含的任何数字
  • 逐个用户名查询需要超过 1 个参数

    我必须实现一个 spring 安全部分 它有超过 1 个参数来获取用户 它将通过 ID 和产品名称获取用户 我知道逐个用户名查询只能提供一个参数 我想知道是否可以提供许多逐个用户名查询选项并给他们某种 ID 但我不确定如何验证时将被引用 有
  • JavaScript for in 循环,但相反?

    采用具有 4 个属性的 JavaScript 对象 function Object this prop1 this prop2 this prop3 this prop4 var obj new Object 我使用 for in 循环来检
  • 播放 Json:将 Reads[T] 转换为 Reads[Seq[T]] 而不使用隐式

    我有一个Reads T 我想解析一个 Json 对象 它应该是一个数组T的 有没有简单的方法获得Reads Seq T without定义我的Reads T 隐含的 本质上 我正在寻找一个需要的函数Reads T 并返回Reads Seq
  • 理解 ngRepeat 'track by' 表达式

    我很难理解如何track byAngularJS 中 ng repeat 的表达有效 文档非常稀缺 http docs angularjs org api ng directive ngRepeat http docs angularjs
  • C# - 如何在没有 IDE/Visual Studio 的情况下编写程序? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在 Notepad 和 MonoDevelop 中仅使用 cs 文件而不是解决方案来制作 C 控制台应用程序 我从 CMD 编译代码 我
  • 为什么 DataFrame 中缺少分区键列

    我有一项工作 加载 DataFrame 对象 然后使用 DataFrame 将数据保存为镶木地板格式partitionBy方法 然后我发布创建的路径 以便后续作业可以使用输出 输出中的路径如下所示 ptest SUCCESS ptest i
  • 使用更少的代码进行脑筋急转弯

    这是我尝试编写的 R 问题的一个小脑筋急转弯 假设桌子上有 15 支蜡烛 在三个不同的回合中 您将根据蜡烛是否已经点燃来点燃或熄灭给定的蜡烛 因此 如果给定的蜡烛已经点燃 那么您的行动就是将其熄灭 另一方面 如果蜡烛没有点燃 那么你的行动就
  • CreateDC() 导致 glutInit() 失败?

    我编写了一段代码来创建一个窗口并在其中绘制一个形状 include
  • Jquery - 克隆表行时禁用 select2 下拉列表

    我有一个带有四个 select2 下拉列表的表 当我克隆该行以复制它时 新行的下拉列表被禁用 我无法单击它们 我必须在代码中添加什么才能激活它们 HTML 表格 table width 100 tbody tr th class tab h
  • 如何匹配不包含单词的行[重复]

    这个问题在这里已经有答案了 我想知道如何使用Python风格的正则表达式来匹配不包含特定单词的行 只需使用正则表达式 不涉及Python函数 Example PART ONE OVERVIEW 1 Chapter 1 Introductio
  • Postman中如何自动获取token

    我使用 Postman 桌面应用程序进行 Web API 测试 我有很多控制器 每个控制器都需要一个令牌 首先我得到Bearer token然后将其复制到其他请求中 该令牌有时间限制 我可以自动获取令牌 然后自动将其设置为所有其他请求吗 好
  • 生成的 JsonResult 中的属性名称大小写不一致

    我已经为此摸不着头脑有一段时间了 并决定让 SO 社区来尝试一下 我有一些响应客户端 POST 的操作 这些操作执行简单的任务并返回JsonResult从具有简单布尔 Success 属性的匿名类构建 如果成功 或者返回PartialVie
  • 错误:sonar.sources 的值无效

    尝试运行 sonartest 但失败了 我的詹金斯控制台输出 Started by user Badal Singh Building on master in workspace C Program Files x86 Jenkins w
  • 从设备获取屏幕截图时出现意外错误:EOF

    当我尝试在 Android Studio 中从我的某些项目中截取屏幕截图 通过按相机图标 时 我收到以下消息 Unexpected error while obtaining screenshot from device EOF 如果我在打
  • 如何比较java中的多个类?

    现在 我已经编写了对整数和字符串数组进行排序的比较器 从代码中可以看出 如果两个类不相同 则 String 类将采用大于值 但是 这仅允许两个类 如果我想向数组添加另一个基本类型 例如 Float 怎么办 我必须向 if else 语句添加