Modyfikacje obiektów w ArrayList

0

Witam,
Mam pytanie w jaki sposób mogę edytować elementy w ArrayList?
Chodzi dokładnie o to, że mam utworzone obiekty klasy Zaangazowanie, które znajdują się w ArrayList, niestety niektóre elementy się powtarzają, a dokładniej niektóre Cif się powtarzają.
Problem polega na tym, że na liście nie mogą się powtarzać obiekty o tych samych Cif. Niestety nie wiem jak doprowadzić do sytuacji w której pola zaangICBS dla tych samych Cif zostaną zsumowane i na liście pozostaną tylko unikalne Cif. Macie jakieś propozycje? Do przeglądania ArrayList wykorzystuję Iterator.

public class Zaangazowanie implements Comparable<Object>{
	private int Cif;
	private double zaangICBS=0;
	private double zaangLea=0;

	public Zaangazowanie() {
		// TODO Auto-generated constructor stub
	}
	
	public Zaangazowanie(int _cif, double _icbs) {
		this.Cif = _cif;
		this.zaangICBS = _icbs;
		this.zaangLea = 0;
	}

	public int getCif() {
		return Cif;
	}

	public void setCif(int cif) {
		Cif = cif;
	}

	public double getZaangICBS() {
		return zaangICBS;
	}

	public void setZaangICBS(double zaangICBS) {
		this.zaangICBS = zaangICBS;
	}

	public double getZaangLea() {
		return zaangLea;
	}

	public void setZaangLea(double zaangLea) {
		this.zaangLea = zaangLea;
	}

	public int compareTo(Object obj) {
		int wynik = String.valueOf(this.Cif).compareTo(String.valueOf(((Zaangazowanie) obj).Cif));
		
		return wynik;
	}
}
0
  1. Wyciągasz obiekt.
  2. Modyfikujesz.
    Chyba że obiekty są immutable. Wtedy
  3. Usuwasz obiekt z kolekcji.
  4. Modyfikujesz / tworzysz nowy o zmodyfikowanych wartościach.
  5. Wstawiasz do kolekcji.
0

Przed dodaniem nowej wartości do listy musisz sprawdzić czy w liście nie ma już obiektu Zaangazowanie o podanym Cif, jeśli jest to zwiększ jego zaangICBS o tyle ile posiadał element, który chciałeś dodać. Jeśli takiego elementu nie ma to po prostu dodaj nowy element do listy.

Tak na marginesie zmienne należy raczej nazywać z małych liter, więc zamiast

private int Cif;

powinno być private int cif;

0
  1. A czemu to jest ArrayList? Zróbże Map gdzie kluczem będzie ten twój cif i tyle.
  2. To twoje compareTo to woła o pomstę do nieba. Czy ty upadłeś na głowę? http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#compare(int,%20int)
0

Nie, ze cos, ale dlaczego nie mozesz skorzystac z kolekcji Set skoro zalezy Ci na unikalnosci ?

0

@miszasty93, bo trzeba wtedy poprawnie implementować hashCode, a nie zawsze jest to możliwe (czasami unikalność oznacza jedno takie samo pole, a hashCode jest liczony dla "prawdziwej unikalności" z wielu pól), ale wtedy używasz > http://koziolekweb.pl/2014/12/01/gdzie-diabel-nie-moze-tam-wrapper-posle/

@gruby555, dla ciebie ten sam link o wrapperze i robieniu unikalnej listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1