[BAEL-6339] custom iterator with testcases (#14038)
Co-authored-by: Bhaskar <bhaskar.dastidar@freshworks.com>
This commit is contained in:
parent
06bf1155e8
commit
da265d4f81
@ -1,10 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>core-java-collections-5</artifactId>
|
<artifactId>core-java-collections-5</artifactId>
|
||||||
<name>core-java-collections-5</name>
|
<name>core-java-collections-5</name>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>9</source>
|
||||||
|
<target>9</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
@ -54,5 +66,5 @@
|
|||||||
<roaringbitmap.version>0.9.38</roaringbitmap.version>
|
<roaringbitmap.version>0.9.38</roaringbitmap.version>
|
||||||
<jmh.version>1.36</jmh.version>
|
<jmh.version>1.36</jmh.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.baeldung.customiterators;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
public class CustomMovieIterator implements Iterator<Movie> {
|
||||||
|
private int currentIndex;
|
||||||
|
private final List<Movie> list;
|
||||||
|
|
||||||
|
public CustomMovieIterator(List<Movie> list) {
|
||||||
|
this.list = list;
|
||||||
|
this.currentIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
while (currentIndex < list.size()) {
|
||||||
|
Movie currentMovie = list.get(currentIndex);
|
||||||
|
if (isMovieEligible(currentMovie)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
currentIndex++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Movie next() {
|
||||||
|
if (!hasNext()) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
return list.get(currentIndex++);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isMovieEligible(Movie movie) {
|
||||||
|
return movie.getRating() >= 8;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.baeldung.customiterators;
|
||||||
|
|
||||||
|
public class Movie {
|
||||||
|
private String name;
|
||||||
|
private String director;
|
||||||
|
private float rating;
|
||||||
|
|
||||||
|
public Movie(String name, String director, float rating) {
|
||||||
|
this.name = name;
|
||||||
|
this.director = director;
|
||||||
|
this.rating = rating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDirector() {
|
||||||
|
return director;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDirector(String director) {
|
||||||
|
this.director = director;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getRating() {
|
||||||
|
return rating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRating(float rating) {
|
||||||
|
this.rating = rating;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,139 @@
|
|||||||
|
package com.baeldung.customiterators;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Please note that this class has been added for representation purposes of how a custom collection and its iterator would be.
|
||||||
|
* This does not have working code.
|
||||||
|
*/
|
||||||
|
public class MyList<E> implements List<E> {
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(E e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<E> iterator() {
|
||||||
|
return new MyListIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MyListIterator implements Iterator<E> {
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E next() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] toArray() {
|
||||||
|
return new Object[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T[] toArray(T[] a) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsAll(Collection<?> c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addAll(Collection<? extends E> c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addAll(int index, Collection<? extends E> c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeAll(Collection<?> c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean retainAll(Collection<?> c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E get(int index) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E set(int index, E element) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(int index, E element) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E remove(int index) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int indexOf(Object o) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int lastIndexOf(Object o) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ListIterator<E> listIterator() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ListIterator<E> listIterator(int index) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<E> subList(int fromIndex, int toIndex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package com.baeldung.customiterators;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
public class PalindromIterator implements Iterator<String> {
|
||||||
|
private final List<String> list;
|
||||||
|
private int currentIndex;
|
||||||
|
|
||||||
|
public PalindromIterator(List<String> list) {
|
||||||
|
this.list = list;
|
||||||
|
this.currentIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
while (currentIndex < list.size()) {
|
||||||
|
String currString = list.get(currentIndex);
|
||||||
|
if (isPalindrome(currString)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
currentIndex++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String next() {
|
||||||
|
if (!hasNext()) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
return list.get(currentIndex++);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isPalindrome(String input) {
|
||||||
|
for (int i = 0; i < input.length() / 2; i++) {
|
||||||
|
if (input.charAt(i) != input.charAt(input.length() - i - 1)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.baeldung.customiterators;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class IteratorsUnitTest {
|
||||||
|
@Test
|
||||||
|
public void givenListOfStrings_whenIteratedWithDefaultIterator() {
|
||||||
|
List<String> listOfStrings = List.of("hello", "world", "this", "is", "a", "test");
|
||||||
|
Iterator<String> iterator = listOfStrings.iterator();
|
||||||
|
Assert.assertTrue(iterator.hasNext());
|
||||||
|
assertEquals(iterator.next(), "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenListOfStrings_whenPalindromIterator_thenOnlyPalindromes() {
|
||||||
|
List<String> listOfStrings = List.of("oslo", "madam", "car", "deed", "wow", "test");
|
||||||
|
PalindromIterator palindromIterator = new PalindromIterator(listOfStrings);
|
||||||
|
int count = 0;
|
||||||
|
while (palindromIterator.hasNext()) {
|
||||||
|
palindromIterator.next();
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assertEquals(count, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenMovieList_whenMovieIteratorUsed_thenOnlyHighRatedMovies() {
|
||||||
|
List<Movie> movies = getMovies();
|
||||||
|
CustomMovieIterator movieIterator = new CustomMovieIterator(movies);
|
||||||
|
int count = 0;
|
||||||
|
while (movieIterator.hasNext()) {
|
||||||
|
movieIterator.next();
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assertEquals(4, movies.size());
|
||||||
|
assertEquals(2, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Movie> getMovies() {
|
||||||
|
Movie movie1 = new Movie("The Dark Knight", "Nolan", 10);
|
||||||
|
Movie movie2 = new Movie("Avatar", "Cameron", 9);
|
||||||
|
Movie movie3 = new Movie("Tenet", "Nolan", 7);
|
||||||
|
Movie movie4 = new Movie("Extraction", "Hargrave", 5);
|
||||||
|
return List.of(movie1, movie2, movie3, movie4);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user