1

ネストされた HashMap とかなり複雑なオブジェクトで構成される ListMultimap (Guava) のインスタンスがあります。このインスタンスの toString() を変更して、HashMap を印刷するときにコンソール出力をカスタマイズする方法はありますか? または、HashMap クラスの拡張である新しいクラスを作成し、 toString() メソッドを次のように書き直す唯一の方法です。

class CustomizedListMultiMap extends ListMultiMap<myComplexDatatypeOne, myComplexDatatypeTwo> {
    // overwriting toString
    public String toString() {
        // my custom implementation
    }
}

マルチマップは次のようにインスタンス化されます。

ListMultimap<datatypeOne, datatypeTwo> map = ArrayListMultimap.create();

最初の答えは当てはまらないと思いますか?(でもありがとう。)

4

3 に答える 3

4

匿名クラスはどうですか:

Map<X, Y> map = new HashMap<X, Y>() {
    @Override
    public String toString() {
        // toString implementation here
    }
};

編集:finalクラスでこれを行いたいようです。static toString代わりに、何らかの方法でクラス自体に追加しようとするのではなく、別のメソッドを作成して呼び出すことをお勧めします。

public static String mapToString(Map<X, Y> map) {
    // toString implementation here
} 
于 2013-06-21T17:50:57.227 に答える
1

私はあなたが を持っているという印象を受けており、s の長さに対応するListMultimap<Foo, List<Bar>>ように見える形式でそれを印刷したいと考えています。{a=[1, 2, 3]}List<Bar>

それを行う最も簡単な方法はおそらく

Multimaps.transformValues(multimap, new Function<List<Bar>, Integer>() {
   public Integer apply(List<Bar> list) {
     return list.size();
   }
}).toString();
于 2013-06-21T18:11:42.293 に答える
0

カスタムクラス「customizedHashMap」で toString() メソッドをオーバーライドする必要があります。クラスの 1 つのインスタンスに対してのみ toString() メソッドをカスタマイズすることはできません。

最初の文字を大文字にしたクラス名を使用することをお勧めします!

于 2013-06-21T17:57:01.613 に答える