如何在预排序的 TreeSet 中对对象的某些属性进行排序?

How can I sort on certain properties of an object in a pre-sorted TreeSet?

首先感谢阅读!

我用 logIdlogNamelogCompany、...创建了自定义 class CallLog 这些 CallLogs 存储在 TreeSet 中,默认按 logPrioritylogDateTime 排序。现在我需要打印按不同值排序的融洽关系。我已经使用 printByName() 之类的方法创建了 abstract class Rapport 以按其他值对我的 TreeSet 进行排序。

我不应该改变 CallLog 的 compareTo() 方法,所以我想知道如何使用 CallLog.

的其他属性对我的 TreeSet 进行排序

您无法更改现有 TreeSet 的排序,但您可以将您的值复制到另一个 [临时] 集合,使用自定义 Comparator 以不同方式排序。事实上,您甚至不必创建一个新集合,您可以在打印时对流值进行排序: 例如:

public class Report {
    private Set<CallLog> calls = // initialized somehow...

    public void printByName() {
        calls.stream()
             .sorted(Comparator.comparing(CallLog::logName))
             .forEach(System.out::println);
}