如何在预排序的 TreeSet 中对对象的某些属性进行排序?
How can I sort on certain properties of an object in a pre-sorted TreeSet?
首先感谢阅读!
我用 logId
、logName
、logCompany
、...创建了自定义 class CallLog
这些 CallLogs 存储在 TreeSet 中,默认按 logPriority
和 logDateTime
排序。现在我需要打印按不同值排序的融洽关系。我已经使用 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);
}
首先感谢阅读!
我用 logId
、logName
、logCompany
、...创建了自定义 class CallLog
这些 CallLogs 存储在 TreeSet 中,默认按 logPriority
和 logDateTime
排序。现在我需要打印按不同值排序的融洽关系。我已经使用 printByName()
之类的方法创建了 abstract class Rapport
以按其他值对我的 TreeSet 进行排序。
我不应该改变 CallLog 的 compareTo()
方法,所以我想知道如何使用 CallLog
.
您无法更改现有 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);
}