2009-11-06 8 views
25

Bu genel amaçlı kütüphane yöntemi için en iyi uygulama nedir? En kodlama bulmaca olduğu gibi, bu bulmaca yargılamak içinBasit Java Haritası bulmaca

public static <K, V> boolean containsEntry(
    Map<K, V> map, K key, V value) {} 

Kriterler, bu sırada şunlardır:

  1. tamlığı PayPal katkısının
  2. Doğruluk
  3. Performans
  4. Güzellik
  5. Makbuz

DÜZENLEME: kapatıldığı beridir

Eh, ben de yanıt sonrası olabilir.

return map.entrySet().contains(
     new AbstractMap.SimpleImmutableEntry<K, V>(key, value)); 

O bir örneğini tahsis etmez, ancak optimum bir şey yapmak için biraz daha fırsat haritası uygulaması verir:

V valueForKey = map.get(key); 
    return (valueForKey == null) 
     ? value == null && map.containsKey(key) 
     : valueForKey.equals(value); 

Akıllı basit bir çözüm olacaktır: Ben bu muhtemelen en uygun olduğunu düşünüyorum.

+0

"En az bir iyi yanıtı var" - Hayır, ** bir ** 'en iyi' cevabı gereği ... – jjnguy

+0

Kevin, buna benzer sorular soracaksanız, daha iyi kurallar koymanız gerekir. Aksi halde, bu gerçekten yeterli şekilde cevaplanabilecek bir soru değildir. – jjnguy

+3

Tamam, deniyorum. Düzenleme konusuna bakın. En iyi, olsa da sizin tanımınızı merak ediyorum. Poker elimdeki dört kartın 2'si kulüp, 3'ü kulüp, maça ası, kupa ası ise, elimdeki en iyi beşinci kart hangisi? –

cevap

0

Tahminen o dönmek için yaratılmış bir boolean:

public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) { 
    return map.containsKey(key) && map.get(key).equals(value); 
} 
+0

Whoops, postayı sabitleyin, teşekkürler. Tüm olası 'anahtar' ve 'değer' değerlerini desteklemek isteriz. –

3
public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) { 
    returns map.containsKey(key) && isEqual(map.get(key), value); 
} 
private static boolean isEqual(Object a, Object b) { 
    return a == null ? a == b : a.equals(b); 
} 

Copied from deleted post.

+0

'&' yerine "&" ifadesi kullanıldı mı? –

+0

Dürüst olmak gerekirse, silinen cevabı düz bir şekilde kopyaladım. – jjnguy

+2

silinmiş bir cevap oldu mu? ve sen kopyaladın mı? Kafam karıştı. Her neyse, bu doğru görünüyor, ama olabildiğince iyi değil. –