From 91ed79e6bd5e042461b4dbcb7b4f0e3a2f9260e3 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Mon, 18 Aug 2014 23:18:15 +0300 Subject: [PATCH] added iterator sample --- iterator/pom.xml | 23 +++++++++ iterator/src/main/java/com/iluwatar/App.java | 35 ++++++++++++++ iterator/src/main/java/com/iluwatar/Item.java | 25 ++++++++++ .../main/java/com/iluwatar/ItemIterator.java | 8 ++++ .../src/main/java/com/iluwatar/ItemType.java | 10 ++++ .../main/java/com/iluwatar/TreasureChest.java | 34 +++++++++++++ .../iluwatar/TreasureChestItemIterator.java | 48 +++++++++++++++++++ pom.xml | 1 + 8 files changed, 184 insertions(+) create mode 100644 iterator/pom.xml create mode 100644 iterator/src/main/java/com/iluwatar/App.java create mode 100644 iterator/src/main/java/com/iluwatar/Item.java create mode 100644 iterator/src/main/java/com/iluwatar/ItemIterator.java create mode 100644 iterator/src/main/java/com/iluwatar/ItemType.java create mode 100644 iterator/src/main/java/com/iluwatar/TreasureChest.java create mode 100644 iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java diff --git a/iterator/pom.xml b/iterator/pom.xml new file mode 100644 index 000000000..0df419ffb --- /dev/null +++ b/iterator/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + iterator + 1.0-SNAPSHOT + iterator + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/iterator/src/main/java/com/iluwatar/App.java b/iterator/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..b3ca3d491 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/App.java @@ -0,0 +1,35 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + TreasureChest chest = new TreasureChest(); + + ItemIterator ringIterator = chest.Iterator(ItemType.RING); + while (ringIterator.hasNext()) { + System.out.println(ringIterator.next()); + } + + System.out.println("----------"); + + ItemIterator potionIterator = chest.Iterator(ItemType.POTION); + while (potionIterator.hasNext()) { + System.out.println(potionIterator.next()); + } + + System.out.println("----------"); + + ItemIterator weaponIterator = chest.Iterator(ItemType.WEAPON); + while (weaponIterator.hasNext()) { + System.out.println(weaponIterator.next()); + } + + System.out.println("----------"); + + ItemIterator it = chest.Iterator(ItemType.ANY); + while (it.hasNext()) { + System.out.println(it.next()); + } + } +} diff --git a/iterator/src/main/java/com/iluwatar/Item.java b/iterator/src/main/java/com/iluwatar/Item.java new file mode 100644 index 000000000..f7a3b7661 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/Item.java @@ -0,0 +1,25 @@ +package com.iluwatar; + +public class Item { + + private ItemType type; + private String name; + + public Item(ItemType type, String name) { + this.setType(type); + this.name = name; + } + + @Override + public String toString() { + return name; + } + + public ItemType getType() { + return type; + } + + public void setType(ItemType type) { + this.type = type; + } +} diff --git a/iterator/src/main/java/com/iluwatar/ItemIterator.java b/iterator/src/main/java/com/iluwatar/ItemIterator.java new file mode 100644 index 000000000..6c05d6f5c --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/ItemIterator.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public interface ItemIterator { + + boolean hasNext(); + + Item next(); +} diff --git a/iterator/src/main/java/com/iluwatar/ItemType.java b/iterator/src/main/java/com/iluwatar/ItemType.java new file mode 100644 index 000000000..905179417 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/ItemType.java @@ -0,0 +1,10 @@ +package com.iluwatar; + +public enum ItemType { + + ANY, + WEAPON, + RING, + POTION + +} diff --git a/iterator/src/main/java/com/iluwatar/TreasureChest.java b/iterator/src/main/java/com/iluwatar/TreasureChest.java new file mode 100644 index 000000000..a0d69aab6 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/TreasureChest.java @@ -0,0 +1,34 @@ +package com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +public class TreasureChest { + + private List items; + + public TreasureChest() { + items = new ArrayList<>(); + items.add(new Item(ItemType.POTION, "Potion of courage")); + items.add(new Item(ItemType.RING, "Ring of shadows")); + items.add(new Item(ItemType.POTION, "Potion of wisdom")); + items.add(new Item(ItemType.POTION, "Potion of blood")); + items.add(new Item(ItemType.WEAPON, "Sword of silver +1")); + items.add(new Item(ItemType.POTION, "Potion of rust")); + items.add(new Item(ItemType.POTION, "Potion of healing")); + items.add(new Item(ItemType.RING, "Ring of armor")); + items.add(new Item(ItemType.WEAPON, "Steel halberd")); + items.add(new Item(ItemType.WEAPON, "Dagger of poison")); + } + + ItemIterator Iterator(ItemType type) { + return new TreasureChestItemIterator(this, type); + } + + public List getItems() { + ArrayList list = new ArrayList<>(); + list.addAll(items); + return list; + } + +} diff --git a/iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java new file mode 100644 index 000000000..01e089b08 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java @@ -0,0 +1,48 @@ +package com.iluwatar; + +import java.util.List; + +public class TreasureChestItemIterator implements ItemIterator { + + private TreasureChest chest; + private int idx; + private ItemType type; + + public TreasureChestItemIterator(TreasureChest chest, ItemType type) { + this.chest = chest; + this.type = type; + this.idx = -1; + } + + @Override + public boolean hasNext() { + return findNextIdx() != -1; + } + + @Override + public Item next() { + idx = findNextIdx(); + if (idx != -1) { + return chest.getItems().get(idx); + } + return null; + } + + private int findNextIdx() { + + List items = chest.getItems(); + boolean found = false; + int tempIdx = idx; + while (!found) { + tempIdx++; + if (tempIdx >= items.size()) { + tempIdx = -1; + break; + } + if (type.equals(ItemType.ANY) || items.get(tempIdx).getType().equals(type)) { + break; + } + } + return tempIdx; + } +} diff --git a/pom.xml b/pom.xml index e08b5109f..3efe1bfa0 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ chain command interpreter + iterator