【问题标题】:Pass "<" or ">" as parameter in Comparator在比较器中传递“<”或“>”作为参数
【发布时间】:2025-12-18 01:30:01
【问题描述】:

我正在研究一种对具有两个参数的数据进行排序的方法:

一个通用的ArrayList 和一个Comparator 的实例。

public static <T> void insertionSort(ArrayList<T> array, Comparator<T> c) { ... }

我想让用户决定是按降序还是升序排序。我可以通过以某种方式将符号传递给Comparator 来做到这一点吗?我问这个是因为我无法将其他参数添加到我的函数中。

【问题讨论】:

  • Comparator c = "&lt;".equals(order) ? lessComp : greaterComp ?使用两个比较器并根据参数简单地编写一个 getter 逻辑。您也可以使用Comparator.reversed 而不是写两个。但想法是一样的
  • 请分享您的代码。
  • 我编辑了问题
  • 根据用户输入传递comparatorcomparator.reversed()
  • 你可以编写自己的Comparator类,一个返回first - second,另一个返回second - first

标签: java algorithm sorting methods comparator


【解决方案1】:

我想让用户决定是按降序还是升序排序。

API 用户将通过调用该方法并传递Comparator&lt;T&gt; 的实例来做出此决定:

insertionSort(list, Comparator.naturalOrder());
insertionSort(list, Comparator.reverseOrder());

不需要额外的参数。


如果您正在设计一个用户输入所需顺序的应用程序(我将其命名为input),则可以使用一个简单的三元运算符:

insertionSort(list, ">".equals(input) ? naturalOrder() : reverseOrder());

【讨论】: