diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/IterableExample.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/IterableExample.java new file mode 100644 index 0000000000..a0cbcf665e --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/IterableExample.java @@ -0,0 +1,48 @@ +package com.baeldung.collections.iterable; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +class IterableExample { + + public static void iterateUsingIterator() { + List numbers = getNumbers(); + + Iterator iterator = numbers.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } + + public static void removeElementsUsingIterator() { + List numbers = getNumbers(); + + Iterator iterator = numbers.iterator(); + while (iterator.hasNext()) { + iterator.remove(); + } + } + + public static void iterateUsingEnhancedForLoop() { + List numbers = getNumbers(); + + for (Integer number : numbers) { + System.out.println(number); + } + } + + public static void iterateUsingForEachLoop() { + List numbers = getNumbers(); + numbers.forEach(System.out::println); + } + + private static List getNumbers() { + List numbers = new ArrayList<>(); + numbers.add(10); + numbers.add(20); + numbers.add(30); + numbers.add(40); + return numbers; + } +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/Product.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/Product.java new file mode 100644 index 0000000000..b29088f6f0 --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/Product.java @@ -0,0 +1,28 @@ +package com.baeldung.collections.iterable; + +class Product { + + private String name; + private double price; + + public Product(String code, double price) { + this.name = code; + this.price = price; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterable.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterable.java new file mode 100644 index 0000000000..2ed2315e56 --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterable.java @@ -0,0 +1,18 @@ +package com.baeldung.collections.iterable; + +import java.util.Iterator; +import java.util.List; + +class ProductIterable implements Iterable { + + List productList; + + public ProductIterable(List productList) { + this.productList = productList; + } + + @Override + public Iterator iterator() { + return productList.iterator(); + } +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterableClient.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterableClient.java new file mode 100644 index 0000000000..9e65522194 --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterable/ProductIterableClient.java @@ -0,0 +1,17 @@ +package com.baeldung.collections.iterable; + +import java.util.Arrays; +import java.util.List; + +class ProductIterableClient { + + public static void main(String[] args) { + List products = Arrays.asList(new Product("Salad", 45), new Product("Tuna", 42), new Product("Eggplant", 65), new Product("Bread", 22), new Product("Banana", 29)); + + ProductIterable iterable = new ProductIterable(products); + + for (Product product : iterable) { + System.out.println(product.getName()); + } + } +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIterator.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIterator.java new file mode 100644 index 0000000000..e6e44c7452 --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIterator.java @@ -0,0 +1,8 @@ +package com.baeldung.collections.iterator; + +interface CustomIterator { + + boolean hasNext(); + + T next(); +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIteratorClient.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIteratorClient.java new file mode 100644 index 0000000000..8ce7cd027e --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/CustomIteratorClient.java @@ -0,0 +1,12 @@ +package com.baeldung.collections.iterator; + +class CustomIteratorClient { + + public static void main(String[] args) { + CustomIterator iterator = Numbers.iterator(); + + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/Numbers.java b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/Numbers.java new file mode 100644 index 0000000000..6d700a3e8e --- /dev/null +++ b/core-java-modules/core-java-collections-2/src/main/java/com/baeldung/collections/iterator/Numbers.java @@ -0,0 +1,51 @@ +package com.baeldung.collections.iterator; + +import java.util.Arrays; +import java.util.List; + +class Numbers { + + private static final List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); + + private Numbers() { + } + + public static CustomIterator iterator() { + return new PrimeIterator(); + } + + private static class PrimeIterator implements CustomIterator { + + private int currentPosition; + + private static boolean isPrime(int number) { + for (int i = 2; i <= number / 2; ++i) { + if (number % i == 0) { + return false; + } + } + return true; + } + + @Override + public Integer next() { + return numbers.get(currentPosition++); + } + + @Override + public boolean hasNext() { + if (currentPosition > numbers.size()) { + return false; + } + + for (int i = currentPosition; i < numbers.size(); i++) { + if (isPrime(numbers.get(i))) { + currentPosition = i; + return true; + } + } + + return false; + } + } +}