2

良い一日、

いくつかのデータを含むセットがあります:

Set< AItem > aItems = aItem
                    .getItems( );

ソートを行いたいので、最初にリストに変換し、ソート後、セットに戻すだけです。

List< AItem > tempoAccounts = new ArrayList(aItems);

Collections.sort(tempoAccounts, new Comparator() {
                public int compare(Object arg0, Object arg1) {
                    // sorting logic here
                }
            });

// convert from list back to set
aItems = ImmutableSet.copyOf(tempoAccounts);

これにより、正しい結果が得られ、すべてのデータがそれに応じてソートされます。

ただし、さらにアイテムを追加したい場合aItems

AItem aai = new AItem();
            aai.setAId( (long) 2222 );
            aai.setLimit( BigDecimal.ZERO );

それから私はヒットします:

Exception created : [java.lang.UnsupportedOperationException
    at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:91)

だから私は

aItems = ImmutableSet.copyOf(tempoAccounts);

aItems = new HashSet<AItem>(tempoAccounts);

UnsupportedOperationExceptionこのセット内に新しいアイテムを追加しても、これは得られません。しかし、私のソートはなくなりました。セットは正しくソートされていません。

セットを並べ替えて、例外なく内部にアイテムを追加できるアイデアはありますか?

親切なアドバイス。

4

1 に答える 1

2

HashSet順序付けられていないセットとして表示する必要があります。ソートされたセットが必要な場合は、次を使用してTreeSetください。

Set<AItem> sortedItems = new TreeSet<>(new Comparator<AItem>() { ... });
sortedItems.addAll(aItems);

(ところで、生の型を使用しないでくださいComparator... 生の型を完全に避けるようにしてください。)

リストを作成する必要も、不変セットを作成する必要もありません...

于 2015-09-10T09:19:58.540 に答える