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

时间:2016-11-10 18:32:00

标签: java sorting compare treeset

首先,感谢阅读!

我已使用CallLoglogIdlogName创建了自定义类logCompany,... 这些CallLog存储在TreeSet中,默认情况下按logPrioritylogDateTime排序。现在我需要打印按不同值排序的rapports。我已使用abstract class Rapport等方法创建printByName(),以便按其他值对TreeSet进行排序。

我不应该改变CallLog的compareTo()方法,所以我想知道如何使用CallLog的其他属性对TreeSet进行排序。

1 个答案:

答案 0 :(得分:0)

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

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

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