Write an algorithm that collapses a list of Iterators into a single Iterator.
package javacore; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; public class CollapseIterators { /** * @param args * Write an algorithm that collapses a list of Iterators into a * single Iterator. */ public static void main(String[] args) { final Iterator<Integer> a = Arrays.asList(1, 2, 3, 4, 5).iterator(); final Iterator<Integer> b = Arrays.asList(6).iterator(); final Iterator<Integer> c = new ArrayList<Integer>().iterator(); final Iterator<Integer> d = new ArrayList<Integer>().iterator(); final Iterator<Integer> e = Arrays.asList(7, 8, 9).iterator(); final Iterator<Integer> singleIterator = singleIterator(Arrays.asList( a, b, c, d, e)); if (null != singleIterator && singleIterator.hasNext()) { System.out.println("Single Iterator obtained!!"); while (singleIterator.hasNext()) { System.out.println(singleIterator.next().toString()); } } else { System.out.println("Single Iterator did not obtained"); } } public static <T> Iterator<T> singleIterator( final List<Iterator<T>> iteratorList) { ListIterator<T> it = new ListIterator<>(iteratorList); return it; } } class ListIterator<T> implements Iterator<T> { // Field private final Iterator<Iterator<T>> listIterator; private Iterator<T> currentIterator; // Constructor: make list iterator into Iterator<iterator>> public ListIterator(List<Iterator<T>> iterators) { this.listIterator = iterators.iterator(); this.currentIterator = listIterator.next(); } @Override public boolean hasNext() { // CurrentIterator has no next if (!currentIterator.hasNext()) { // set up next iterator as currentIterator if (!listIterator.hasNext()) return false; currentIterator = listIterator.next(); // NOTE: recurse to check if next still has no next hasNext(); } return true; } public T next() { hasNext(); return currentIterator.next(); } // public boolean remove() public void remove() { hasNext(); currentIterator.remove(); } }
Sample Output:-
Single Iterator obtained!!
1
2
3
4
5
6
7
8
9
Problem reference: "Java Programming Interviews Exposed"
Related Question:
How can we achieve this behaviour using Google Guava collections framework ?
This comment has been removed by the author.
ReplyDeleteinformative blog , keep posting and if you are intresting in code developer then checkout python classes in satara
ReplyDeleteYour blog is nice & informative thanks
ReplyDeleteAdvanced Java Certification Training
F1DD964F18
ReplyDeleteBeğeni Satın Al
Güvenilir Takipçi
Takipçi Satın Al
22C01EB9D7
ReplyDeleteGörüntülü Sex
Ücretli Show
Ücretli Show
C53A2346BD
ReplyDeleteWhatsapp Ücretli Şov
Görüntülü Show
Telegram Show Kanalı
ReplyDeleteWie können Unternehmen ihre cybersecurity weiterbildung im Bereich ransomware-prävention effektiv gestalten? Ein wichtiger Schritt ist die regelmäßige Erstellung und Pflege von Backups, die auf separaten Servern gespeichert werden. Laut BSI TR-03111 sollte die Sicherungskopie mindestens eine Kopie außerhalb des Netzwerks enthalten, um im Falle eines Angriffs schnell wieder arbeiten zu können. Segmentierung des Netzwerks verhindert die Ausbreitung von Schadsoftware und schützt sensible Daten. Zudem bietet der Einsatz einer Endpoint Detection and Response Lösung (EDR) eine kontinuierliche Überwachung und schnelle Reaktion bei verdächtigen Aktivitäten, was bei Angriffen wie MOVEit oder LockerGoga entscheidend sein kann. Durch diese Maßnahmen steigt die Wahrscheinlichkeit, Ransomware-Erpressung erfolgreich abzuwehren; zusätzliche Informationen finden sich unter csvisor.de.
39CAF145
ReplyDeleteMuş Esçort
Adıyaman Esçort
Van Esçort
Trabzon Esçort
Amasya Esçort
Tokat Esçort
Nevşehir Esçort
Niğde Esçort
Maraş Esçort