3

私は

TreeMap マップ = 新しい TreeMap();

選択基準に基づいてドキュメントの値をビューに保存します。map は、作成日をキーとして、ドキュメントの値をオブジェクトとして格納します。

オブジェクト内に、「フォーム」フィールドがあります。ドキュメントにはさまざまな形式があります(メモ、通知、ファックスなど)

allEntries を返すメソッドがあります。それは問題なく、期待どおりに機能します。

ここで、フォーム フィールドで選択を行い、マップ内のドキュメントのサブセットのみを返したいと考えています。

誰かがこれを行う方法を正しい方向に向けることができますか?

4

4 に答える 4

4

マップのキーではないものを選択したいので、すべてのアイテムを反復処理する必要があります。

外部ライブラリを使用できる場合はCollections2.filter()、google のguava librariesから使用できます。IE

TreeMap<Date, Document> map = ...;
final String formValue = "notice";
Collection<Document> result = Collections2.filter(map.values(), new Predicate<Document>() {
    public boolean apply(Document input) {
        return formValue .equals(input.getForm());
    }
}
于 2012-09-06T07:16:02.220 に答える
0

1)すべての値を調べて、それらの一致基準を新しいコレクションに入れることができます 2)他のコレクション(個別の変数または Map> のいずれか)(またはそのようなもの、リストの代わりにセットを使用することを検討してください)

1) 取得が遅い、2) 削除が遅い、メモリ消費量が多い

于 2012-09-06T07:18:07.957 に答える
0

guava ライブラリは機能しましたが、少しやり過ぎです。だから私は次のようになりました

TreeMap<String, Object> mapFiltered = new TreeMap<String, Object>();
LinkedList<CommunicationDocumentEntry> map = new LinkedList<CommunicationDocumentEntry>();

    public Collection<Object> getAllEntries(String frm, boolean order) {
    this.mapFiltered.clear();

    Iterator<CommunicationDocumentEntry> itr = this.map.iterator();
    while (itr.hasNext()) {
        CommunicationDocumentEntry entry = itr.next();
        if (EMPTY_STRING.equals(frm) || frm == null) {
            this.mapFiltered.put(entry.getDateCreated(), entry.getEntry());
        } else {
            if (entry.getForm().toUpperCase().equals(frm.toUpperCase())) {
                this.mapFiltered.put(entry.getDateCreated(), entry.getEntry());
            }
        }
    }

    if (order) {
        return this.mapFiltered.descendingMap().values();
    } else {
        return this.mapFiltered.values();
    }
}

確かに完璧ではありませんが、私にとってはうまくいきます...

于 2012-09-06T11:33:07.003 に答える
0

2 つのマップを使用してデータを保存できます。

memo-notice などに対応する ID を格納するには、1 つの単純な Hashmap で十分であり、対応するすべてのデータを現在の形式で含む Treemap を値として格納します。

于 2012-09-06T07:13:52.073 に答える