Gegeven is een lijst van bestellingen van artikels. Elke bestelling van een bepaald artikel wordt geplaatst door een klant en elk artikel kan door een bepaalde leverancier geleverd worden. Het is hierbij mogelijk dat een klant meerdere artikels bestelt en dat een leverancier meerdere artikels kan leveren. Gevraagd is om per leverancier een lijst van bestelde artikels en het aantal hiervan te bepalen.

Geef een algoritme voor dit probleem en geef aan hoe daarbij de standaard datatypes kunnen worden gebruikt. Denk ook na over de tijds- en geheugencomplexiteit van je algoritme.

Hiervoor implementeer je de interface LeveringslijstVerwerker1 in een klasse genaamd MijnLeveringslijstVerwerker. Deze bevat een methode public LeveringsOverzicht getLeveringsLijst(List<Bestelling> bestellingen). De input van deze methode is een lijst van bestellingen. De elementen van deze lijst zijn objecten van de gegeven klasse Bestelling2. Dit object geeft de klant en het artikel dat de klant wenst te bestellen weer. Verder zijn ook de klasse Klant3, de klasse Artikel4 en klasse Leverancier5 gegeven. Objecten van deze klassen bevatten steeds een naam. Een object van de klasse Artikel geeft bovendien de leverancier die het artikel kan leveren weer. De output van de methode getLeveringsLijst is een object van het type LeveringsOverzicht.

Het type LeveringsOverzicht vind je terug als binneninterface in de interface LeveringslijstVerwerker. Implementeer deze interface in een binnenklasse van de klasse MijnLeveringslijstVerwerker. De naam van deze klasse mag je zelf kiezen. Om de binneninterface LeveringsOverzicht te implementeren schrijf je de methode public Collection<Artikel> getBesteldeArtikels(Leverancier l) en de methode public int getAantalArtikels(Leverancier l, Artikel a). De input van de eerste methode is een leverancier. De output is de verzameling van artikels die bij deze leverancier besteld worden. De input van de tweede methode is een leverancier \(l\) en een artikel \(a\). De output is het aantal bestellingen van artikel \(a\) bij leverancier \(l\).

Gebruik eventueel de testklasse SimpleTest6 om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.

Opmerking

Het is niet toegestaan om de input van de methode getLeveringsLijst aan te passen. Indien je dit wel doet, zal de test falen.