2016-04-12 12 views
-4

Burada yinelenen değerler içeren bir listeye sahibim. ama ihtiyacım olan şey, liste yinelenen değerler içermemelidir. Pek çok çözümü yığın taşmasından kurtardım. ama herhangi bir çözüm almadı. Aşağıdaki kod, denediğim kodlardan biridir. ama çözümü almadım.java'da ayarlanmadan listeden çiftler nasıl silinir

List<ReportsBean> list = rutils.getYearsReport(year); 
list=========before=====5 
LinkedHashSet<ReportsBean> lhs = new LinkedHashSet<ReportsBean>(list); 
list.clear(); 
list.addAll(lhs); 
list=========after=====5 

önce ve aynı liste büyüklüğü 5. sonra herhangi biri bana yardım eder misiniz.

+2

. Bunu parçacığını çalıştırmadan önce ve sonra listedeki değerler, ne gösterebilir misiniz? –

+4

nasıl ReportsBean nesnelerini karşılaştırdınız mı? Eşittir()/hashCode() yöntemlerini geçersiz kıldınız mı? –

+4

Neler olup bittiğini anlamak için, ReportsBean sınıf koduna ihtiyacımız var.Yani: Eşittir()/hashCode() yöntemleri ve bu nedenle set "çoğaltmaları" kaldıramıyor; çünkü listenin tüm girdileri "benzersiz" dir. – GhostCat

cevap

1

Aşağıdaki kod ile test edilmiş ve bir cazibe gibi çalışır:

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "a")); 
LinkedHashSet<String> lhs = new LinkedHashSet<>(list); 
list.clear(); 
list.addAll(lhs); 
System.out.println(list); 

Ben geçersiz kılınmış değil ya da yanlış da ReportsBean ait equals() yöntem olduğunu söyleyebilirim. (Btw. Eğer equals() geçersiz kılarsanız da hashCode() geçersiz unutmayın. Eğer çalışması gerekir yaptık ne