Java Collecties

Status
Niet open voor verdere reacties.

toyamigo

Nieuwe gebruiker
Lid geworden
24 jan 2013
Berichten
4
Hallo!

Momenteel volg ik een cursus Java Enterprise programmeur en ben met een opdracht bezig waar ik op blijf steken.
Ik moet iets van een winkelmandje maken, hiervoor moet ik elementen van een Arraylist (catalogus met artikelen) in een Treeset (huidig geselecteerde artikelen uit catalogus) krijgen.
Eigenlijk moet ik een artikelnummer intoetsen en het programma moet dan het betreffende artikel uit de Arraylist in het Winkelmandje plaatsen (Treeset).
Kan iemand mij hiermee helpen dmv een voorbeeld of zo? Voor de rest lukt alles alleen van de ene Collectie naar de andere Collectie lukt me niet.
Bij voorbaat dank!

Greets
Tony
 
Volgende classes heb ik al (kan zijn dat er nog van alles de mist in is want ik ben een keer overnieuw begonnen en heb toen van alles geprobeerd):
ps ik hoef dit niet perse opgelost te zien, het gaat er om dat ik begrijp hoe het werkt zodat ik het in het vervolg zelf ook kan ;)


Code:
import java.util.*;

public class Test
{
	static Databank db = new Databank();
	static Winkelwagentje wagen = new Winkelwagentje();

	public Test()
	{

	}

	public static void main(String[] args)
	{
		new Test();
		db.getAllProducten();
		wagen.voegToeArtikel(1234);
		wagen.getAllArtikels();
	}

}

Code:
import java.io.Serializable;

public abstract class Producten implements Serializable
{

	private int prodNummer = 0;

	public Producten(int prodNummer)
	{
		setProdNummer(prodNummer);
	}

	public int getProdNummer()
	{
		return prodNummer;
	}

	private void setProdNummer(int prodNummer)
	{
		this.prodNummer = prodNummer;
	}
}


Code:
public class Boeken extends Producten implements Comparable<Boeken>
{

	private String titel = "";
	private String type = "";
	private long ISBN = 0;
	private int length = 0;

	public Boeken(int prodNummer, String titel, String type, long ISBN)
	{
		super(prodNummer);
		setTitel(titel);
		setType(type);
		setISBN(ISBN);
	}

	public String getTitel()
	{
		return titel;
	}

	private void setTitel(String titel)
	{
		this.titel = titel;
	}

	public String getType()
	{
		return type;
	}

	private void setType(String type)
	{
		this.type = type;
	}

	public long getISBN()
	{
		return ISBN;
	}

	private void setISBN(long ISBN)
	{
		if (checkISBN(ISBN) == 13)
		{
			this.ISBN = ISBN;
		} else
		{
			System.out.println("Verkeerd getal ingevoerd!");
		}
	}

	public int checkISBN(long n)
	{
		length++;
		if ((n / 10) < 10)
		{
			length++;
		} else
		{
			checkISBN(n / 10);
		}
		return length;
	}

	// toString Override
	@Override
	public String toString()
	{
		return ("BOEK\n" + "Productnummer: " + super.getProdNummer()
				+ "\nTitel: " + getTitel() + "\nType: " + getType()
				+ "\nISBN nummer: " + getISBN() + "\n");
	}

	@Override
	public int hashCode()
	{
		return (int) ISBN;
	}

	@Override
	public int compareTo(Boeken b)
	{
		if (ISBN < b.getISBN())
			return -1;
		else if (ISBN > b.getISBN())
			return 1;
		else
			return 0;
	}
}


Code:
public class Dvds extends Producten implements Comparable<Dvds>
{

	private int barCode = 0;
	private int zoneNummer = 0;
	private int aantalDisks = 0;

	public Dvds(int prodNummer, int barCode, int zoneNummer, int aantalDisks)
	{
		super(prodNummer);
		setBarCode(barCode);
		setZoneNummer(zoneNummer);
		setAantalDisks(aantalDisks);
	}

	public int getBarCode()
	{
		return barCode;
	}

	private void setBarCode(int barCode)
	{
		this.barCode = barCode;
	}

	public int getZoneNummer()
	{
		return zoneNummer;
	}

	private void setZoneNummer(int zoneNummer)
	{
		this.zoneNummer = zoneNummer;
	}

	public int getAantalDisks()
	{
		return aantalDisks;
	}

	private void setAantalDisks(int aantalDisks)
	{
		this.aantalDisks = aantalDisks;
	}

	// toString Override
	@Override
	public String toString()
	{
		return ("DVD\n" + "Productnummer: " + super.getProdNummer()
				+ "\nBarcode: " + getBarCode() + "\nZonenummer: "
				+ getZoneNummer() + "\nAantal disks: " + getAantalDisks() + "\n");
	}

	@Override
	public int hashCode()
	{
		return barCode;
	}

	@Override
	public int compareTo(Dvds d)
	{
		if (barCode < d.getBarCode())
			return -1;
		else if (barCode > d.getBarCode())
			return 1;
		else
			return 0;
	}
}


Code:
import java.util.*;

public class Databank
{

	public List<Producten> lijst = new ArrayList<Producten>(20);

	public Databank()
	{
		vulDatabase();
	}

	private void vulDatabase()
	{
		lijst.add(new Dvds(2346, 123456789, 2, 1));
		lijst.add(new Boeken(1236, "The Green Mile", "Hardback", 1234567898767L));
		lijst.add(new Dvds(2347, 123456789, 2, 1));
		lijst.add(new Boeken(1234, "Christine", "Hardback", 1234567898765L));
		lijst.add(new Dvds(2345, 123456789, 2, 1));
		lijst.add(new Boeken(1235, "Cujo", "Paperback", 1234567898766L));
	}

	public void getAllProducten()
	{
		Iterator<Producten> it = lijst.iterator();
		while (it.hasNext())
		{
			Producten prod = it.next();
			System.out.println(prod);
		}

	}
}


Code:
import java.io.*;
import java.util.*;

public class Winkelwagentje implements Comparable, Serializable
{

	private Set<List<Producten>> winkelTs = new TreeSet<List<Producten>>();
	private Databank db = new Databank();

	//

	public void voegToeArtikel(int i)
	{
		Iterator<List<Producten>> pi = winkelTs.iterator();
		while (pi.hasNext())
		{
			List<Producten> p = pi.next();
			System.out.println(p);
			winkelTs.add(p);
		}
	}

	public void getAllArtikels()
	{
		System.out.println("\nArtikels");
		Iterator it = winkelTs.iterator();
		while (it.hasNext())
		{
			Producten prod = (Producten) it.next();
			System.out.println((Producten) prod);
		}
	}

	public Iterator<List<Producten>> iterator()
	{
		return winkelTs.iterator();
	}

	public void vervangArtikel(List<Producten> p)
	{
		p.remove(p);
		// winkelTs2.add(winkelTs2);
		System.out.println("vervangArtikel()\n");
	}

	public void verwijderArtikel()
	{

	}

	public void schrijfWinkelmandje(Set winkelTs)
	{
		try
		{
			FileOutputStream file = new FileOutputStream("winkelwagen.txt",
					false);
			ObjectOutputStream obj = new ObjectOutputStream(file);
			obj.writeObject(winkelTs);
			obj.close();
			file.close();
		} catch (IOException e)
		{
			System.out.println(e.getMessage());
		}
		System.out.println("Geschreven");
	}

	public void leesWinkelmandje()
	{
		try
		{
			// een nieuwe fileInputstream en objectInputstream maken
			FileInputStream file = new FileInputStream("winkelwagen.txt");
			ObjectInputStream obj = new ObjectInputStream(file);
			List<Producten> lijstCd = (List<Producten>) obj.readObject();
			for (Producten cdElement : lijstCd)
			{
			}
			obj.close();
			file.close();
		} catch (Exception ex)
		{
			System.out.println(ex.getMessage());
		}
		System.out.println("Gelezen");
	}

	@Override
	public int compareTo(Object arg0)
	{
		// TODO Auto-generated method stub
		return 0;
	}

}
 
Laatst bewerkt:
Misschien is dit niet helemaal het antwoord op je vraag. Ik weet namelijk niet of je nu een uitleg van de iterator wilt, of een andere oplossing die ook werkt en overzichtelijker is. Meld het gerust indien dit niet je vraag beantwoord.

Jouw lijst met producten is een ArrayList. Een ArrayList heeft verschillende methodes waarmee je een product uit de lijst kan halen. Ik denk dat deze manier makkelijker te implementeren is dan jouw iterator methode.

Code:
public void getAllProducts() {
    	for(Producten p : lijst) { //we lopen door de ArrayList lijst en voeren het stukje in de for-loop voor elk object in deze lijst uit (ik maak gebruik van een 'enhanced for-loop').
    		System.out.println(..);
    	}
    }

Om de artikelen uit de ArrayList te halen en in een TreeSet te plaatsen maken we gebruik van de add methode van de TreeSet en de get methode van de lijst.

Code:
public void voegToeArtikel(int i)
{
	tree.add(lijst.get(i));
}

Stel je wilt alle objecten uit de lijst in de TreeSet plaatsen dan gebruiken we de addall methode.
Code:
tree.addAll(lijst);

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#add(int, E)
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#get(int)
http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html#add(E)
http://www.cis.upenn.edu/~matuszek/General/JavaSyntax/enhanced-for-loops.html

Met vriendelijke groeten,
NewbiProgrammer
 
Hallo Newbi!
Heel erg bedankt voor je reactie. Ik zal zeker straks bekijken of ik het op jouw manier makkelijker kan doen dan met mijn iterator.
Het eigenlijke probleem dat ik door middel van het intikken van bv een produktcode, het bijbehorende element uit de arraylist in de treeset moet stoppen en zo dus eigenlijk een soort winkelmandje creëer. Op dezelfde manier zouden ook elementen UIT de treeset gehaald moeten worden.
Nogmaals hartelijk dank & succes!
Groeten,
Tony
 
Uiteindelijk is het opgelost. Het probleem zat m in mijn 'compare to's van de classes Dvds en Boeken.
Deze heb ik veranderd in verwijzingen naar Produkten, toen ging het programma wel goed.
Bedankt voor de moeite!
Greets
Tony
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan