【发布时间】:2017-11-02 04:17:44
【问题描述】:
给定以下列表:"A", "B", "C", "D", "E", "F", "G"
我需要一个进行以下排序的比较器:
- 指定某个元素(例如
"D") - 从元素开始
- 按照原始顺序依次跟随原始列表的所有以下元素
- 后跟原始列表中所有前面的元素以原始顺序
结果将是:"D", "E", "F", "G", "A", "B", "C"
请注意,我知道我可以做类似以下的事情:
List<String> following = myList.subList(myList.indexOf("D") + 1, myList.size());
List<String> preceding = myList.subList(0, myList.indexOf("D"));
List<String> newList = Stream.of(Collections.singletonList("D"), following, preceding)
.flatMap(List::stream)
.collect(Collectors.toList());
在这个问题中,我明确指的是Comparator 实现。
很明显,它必须将列表和元素作为参数,我只是不清楚比较算法本身:
private static class MyComparator<T> implements Comparator<T> {
private final List<T> list;
private final T element;
private MyComparator(List<T> list, T element) {
this.list = list;
this.element = element;
}
@Override
public int compare(T o1, T o2) {
// Not clear
}
}
【问题讨论】:
-
如果有相同的int应该是
0,如果o1在o1之前,应该是negative,相反的应该是positive(有待确认,可能是相反的)。但是T没有扩展任何东西,你只有Object提供的东西,所以没什么可比较的。嗯,这是在Comparator中解释的 -
我很清楚比较器的工作原理,只是不清楚如何在此处为给定的排序算法生成这些数字 :)
-
你确定你的设计是正确的吗?在我看来,您需要一个基于树的数据结构。
-
"我需要一个比较器来进行以下排序" => 这句话是你困惑的第一点。比较器只比较两个元素。它不进行任何排序,尽管它有助于排序算法获得“正确”的排序顺序。事实上,这个问题对我来说有点不清楚。也许您可以向我们展示您将如何使用这样的比较器?
-
好吧,由于比较器用于通过将每个元素与下一个元素进行比较来“冒泡排序”列表,这并不容易......我想如果你给比较器“元素“这应该改变逻辑,这可能是可能的,但我认为这不值得
标签: java list sorting comparator