2015-08-19 21 views
5

{Price, Quantity} çiftinin bir koleksiyonu verildiğinde, tüm miktarları aynı fiyat noktasında topladım. Bunu başarmanın en kolay yolu nedir? Kirli kesim, Hashmap kullanarak çözümün, fiyat ve değer kümelenmiş nicelik olarak kullanılarak uygulanmasıdır. Ancak, benim bilgimde Float, Hashmap için güvenli bir anahtar değil. Yani bu çözüm hataya eğilimli.Haritadaki boşlukta gezinmek

Bu sorunu çözmek için önerilen alternatif nedir?

+4

Dize anahtar olarak kullanın. Sorun nedir? –

+3

"Fiyat noktasını" tanımlayın. Belli bir aralıkta fiyat mı? Bir fiyat değeri barındıran (kendim için bunun için bir BigDecimal kullanacağım) ve fiyatın bir hashCode'u belirlemek için kullanılan aralığa dönüştürdüğü yeni bir sınıf oluşturmak isteyebilirsiniz. –

+1

Mükemmel. Teşekkürler!! Bu basit çözümü düşünmek için çok fazla sorunla karşılaştım. Teşekkürler @AleksandrM –

cevap

8

BigDecimal'i anahtar olarak kullanabilirsiniz. Hash kodu güvenli olurdu.

Sen aynı ölçeğe sahip böylece örneğin değerlerini başlatmak zorundayız:

tüm fiyatlar çözdüyseniz
BigDecimal key = new BigDecimal(Double.toString(price)).setScale(2); 
+0

@downvoter, -1, herhangi bir nedenden ??? –

+1

BigDecimal'in de bir hassasiyeti vardır ve kesinlikle finansal sabit nokta değerleri için kullanılmalıdır. Tembel olmasına ve bakıma muhtaç olmasına rağmen. –

0

ondalık boyutu (örneğin 2 hane), sadece, Long kullanmak sunma edebilirsiniz Harita anahtarı olarak sent cinsinden fiyat. BigDecimal kullanma

nadir ve zor keşfetmek hatalara yol açabilir, çünkü kötü bir seçenektir - iki BigDecimal ler aynı değer ve aynı hassasiyet (böylece 2.0 sahipseniz eşit eşit değildir 2.00 veya 2 - üçü bir haritadaki farklı tuşlar haline gelir).

İlgili konular