Een van de opdrachten die ik heb gemaakt is de iterator. Ik heb hiervoor gekozen omdat ik nog een keer wilde oefenen met streams en omdat het mij een leuke opdracht leek.
Hieronder mijn uitwerking van de klassen die aangepast moesten worden: Meisjes en jongens-iterator voor de “basisuitwerking” en de klassen jongensiteratorgoedkoop en meisjesiteratorgoedkoop voor de uitwerking om enkel de kledingstukken te krijgen die goedkoper waren dan €30,-.
public class JongensIterator implements Iterator<KledingStuk> {
private List<Integer> keys;
private HashMap<Integer, KledingStuk> items;
private int currentPosition = 0;
public JongensIterator(HashMap<Integer, KledingStuk> items) {
this.items = items;
this.keys = new ArrayList<>(items.keySet());
}
@Override
public boolean hasNext() {
return currentPosition < keys.size();
}
@Override
public KledingStuk next() {
if (!hasNext()) {
return null;
}
= items.get(keys.get(currentPosition));
KledingStuk item ++;
currentPositionreturn item;
}
}
//De iterator gaat over de gehele collectie
import java.util.Iterator;
import java.util.List;
//TODO Vul de iterator aan om hem werkend te krijgen.
public class MeisjesIterator implements Iterator {
private List<KledingStuk> items;
private int currentPosition = 0;
public MeisjesIterator(List<KledingStuk> items) {
this.items = items;
}
@Override
public boolean hasNext() {
//TODO
return currentPosition < items.size();
}
@Override
public Object next() {
//TODO
KledingStuk item = items.get(currentPosition);
currentPosition++;
return item;
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
public class JongenIteratorGoedkoop implements Iterator<KledingStuk> {
private final List<KledingStuk> goedkopeItems;
private final int MAXIMALE_PRIJS = 30;
private int currentPosition = 0;
public JongenIteratorGoedkoop(HashMap<Integer, KledingStuk> kledingMap) {
this.goedkopeItems = kledingMap.values()
.stream()
.filter(kledingStuk -> kledingStuk.getPrijs() < MAXIMALE_PRIJS)
.collect(Collectors.toList());
}
@Override
public boolean hasNext() {
return currentPosition < goedkopeItems.size();
}
@Override
public KledingStuk next() {
if (!hasNext()) {
throw new java.util.NoSuchElementException();
}
KledingStuk item = goedkopeItems.get(currentPosition);
currentPosition++;
return item;
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MeisjesIteratorGoedkoop implements Iterator<KledingStuk> {
private final List<KledingStuk> goedkopeItems;
private int currentPosition = 0;
private final int MAXIMALE_PRIJS=30;
public MeisjesIteratorGoedkoop(List<KledingStuk> items) {
this.goedkopeItems = getUnderPrice(items);
}
private List<KledingStuk> getUnderPrice(List<KledingStuk> items) {
List<KledingStuk> result = new ArrayList<>();
for (KledingStuk item : items) {
if (item.getPrijs() < MAXIMALE_PRIJS) {
result.add(item);
}
}
return result;
}
@Override
public boolean hasNext() {
return currentPosition < goedkopeItems.size();
}
@Override
public KledingStuk next() {
KledingStuk item = goedkopeItems.get(currentPosition);
currentPosition++;
return item;
}
}