0

CollectionUtils.collat​​e メソッドを使用して、2 つのコレクションの結合を見つけようとしています。このメソッドはパッケージorg.apache.commons.collections4から来ています

コード部分は次のとおりです。

Collection<String> tokensUnion2 = CollectionUtils.collate(
    Arrays.asList(new String[]{"my", "sentence", "test", "for", "testing"}), 
    Arrays.asList(new String[]{"my", "sentence", "test", "is", "this"}), 
    false);

結果のコレクションは次のとおりです。

[my, sentence, test, for, test, is, testing, this]

ご覧のとおり、CollectionUtils.collat ​​e の 3 番目のパラメーターは重複が不要であることを示していますが、結果のコレクションには重複が含まれています。

さらに、文字列の重複は削除されましたが、テストはまだ残っています。

結果のコレクションをHashSetに入れるだけでこの問題を解決できましたが、何が間違っていたのか知​​りたいです。

ありがとうございました。

4

1 に答える 1

1

collat​​e メソッドは、2 つのソートされたコレクションを想定しています。CollectionUtils# collat​​e の Java ドキュメントには、次のように記載されています。要素の自然な順序が保持されるように、2 つの並べ替えられたコレクション a と b を 1 つの並べ替えられたリストにマージします。

あなたの例では、引数として指定された 2 つのリストはソートされていません。次のようにリストをソートするようにコードを変更すると

List<String> list1 = Arrays.asList(new String[] { "my", "sentence", "test", "for", "testing" });
List<String> list2 = Arrays.asList(new String[] { "my", "sentence", "test", "is", "this" });

Collections.sort(list1);
Collections.sort(list2);

Collection<String> tokensUnion2 = CollectionUtils.collate(list1, list2, false);

これにより、重複のないソートされたコレクションが返されます

[for, is, my, sentence, test, testing, this]

これが役立つことを願っています。

于 2014-06-19T07:26:21.427 に答える