List
にはHashMaps
が含まれています。リスト内の各HashMap
には、複数のkey/value
ペアが含まれている場合があります。私は、リストのindexOf
に、HashMapで渡された要素のインデックスを調べたいと思います。しかし、問題は、e quals method of HashMapが比較中にすべてentrySet
を見ることです。それは私が望むものではありません。複数のキーと値のペアを持つHashMapを含むListでindexOfを使用する方法
例:
List<HashMap> benefit = new ArrayList<HashMap>();
HashMap map1 = new HashMap();
map1.put("number", "1");
benefit.add(map1);
HashMap map2 = new HashMap();
map2.put("number", "2");
map2.put("somethingelse", "blahblah"); //1
benefit.add(map2);
HashMap find = new HashMap();
find.put("number", "2");
int index = benefit.indexOf(find);
if (index >= 0)
System.out.println(benefit.get(index).get("number"));
上記のコードが原因//1
でラインの何も印刷されません。
- 上記のコードで実際に
2
が印刷されるようにするにはどうすればよいですか? - 自分自身を定義できるように、リストにcomparableを実装する方法はありますか?
int index = myIndexOf(benefit, find); ... static int myIndexOf(List<HashMap> benefit, Map find) { int i = 0; for (Map map : benefit) { Map tmp = new HashMap(map); tmp.keySet().retainAll(find.keySet()); if (tmp.equals(find)) { return i; } i++; } return -1; }
それは上書きされますリストの独自のサブクラスを宣言するために、もちろん、可能です:私はあなたが
retainAll()
を探していると思うので、あなたは、あなたが興味を持っている要素だけを比較することができ
マイク、私はあなたが達成しようとしているかわからないんだけどそこに可能性があります少しのデザインの流れになります。たぶん、他のデータ構造がコードを単純化し、より効率的になるでしょう。あなたの目標は何ですか?何を保管していますか? – Gevorg
渡されたHashMapに同じペアがある場合は?あるいは、「見つける」は常に1組にすぎず、どのインデックスにそのペアが含まれているかを見たいと思っていますか? – rtheunissen
あなたは@Gevorgです。それは設計上の欠陥です。クラスのオブジェクトをハッシュマップではなくリストに格納しておけばいいと思います。それで私は自分の 'equals()'メソッドを公開することができました。しかし、レガシーコードがたくさんあるので、当面は 'HashMaps'で動作するソリューションを好むでしょう。 – Anthony