В зависимости от ваших требований, я думаю, что лучшее решение - хранить значения в стандартном Map
, но предоставить метод для получения Портфелей в порядке ImmutableSortedSet<Portfolio> getSortedPortfolios()
.Метод получит список значений и поместит их в Set
.Это предполагает, что Portfolios implements Comparable
в противном случае вам потребуется предоставить Comparator
.
ImmutableSortedSet<Portfolio> getSortedPortfolios(){
return ImmutableSortedSet.builder()
.addAll(myMap.getValues())
.build();
}
Если вам действительно нужна безопасность потоков, я бы порекомендовал использовать конструктор копирования для создания снимков и их вставки.Это гарантирует, что возвращенный отсортированный список останется отсортированным.
ImmutableSortedSet<Portfolio> getSortedPortfolios(){
ImmutableSortedSet.Builder<Portfolio> builder = ImmutableSortedSet.builder();
for (Portfolio p : myMap.getValues()){
builder.add(new Portfolio(p));
}
return builder.build();
}
Я использую ImmutableSortedSet в Guava, но вы можете просто использовать SortedSet
и рассматривать его как неизменный или использовать Collection.unmodifiable ...