Hola, quería saber si mi resolución está bien (el testeo lo pasa) o si se le puede mejorar en algo. Mis dudas son:
El hasNext del PairCyclicIterator tiene una funcionalidad distinta, ya que ahora siempre "va a haber next", está bien plantear eso o debe seguir la lógica del hasNext común?
El tipo de dato de la colección cuando la guardo en el PairCyclicIterator tiene que ser Iterable? Pregunto porque la consigna dice "a partir de una colección" entonces el constructor debe recibir una collection, pero en las soluciones lo guarda como Iterable, que tiene sentido ya que uso solamente el método iterator.
Acá mi código:
public class PairCyclicIterator<A> implements Iterator<PairCyclicIterator.Pair<A>> {
private final Collection<A> c;
private Iterator<A> it;
public PairCyclicIterator(Collection<A> c){
this.c = c;
this.it = c.iterator();
}
@Override
public boolean hasNext(){
return !c.isEmpty();
}
private A cyclicNext(){
return it.hasNext() ? it.next() : (it = c.iterator()).next();
}
@Override
public Pair<A> next(){
if(!hasNext()){
throw new NoSuchElementException();
}
A l = cyclicNext();
A r = cyclicNext();
return new Pair<>(l,r);
}
public static class Pair<E>{
private final E l, r;
Pair(E l, E r){
this.l = l;
this.r = r;
}
@Override
public String toString(){
return "# %s + %s #".formatted(l,r);
}
}
}
Hola @manuothatceguy
La implementación es correcta.
Está bien plantear eso y está bien modularizado lo de cyclicNext
Siempre vamos a poner como tipo de dato a la interfaz más arriba en la jerarquía que ofrezca los métodos invocados (es una buena práctica). Como sólo usamos .iterator con requerir Iterable en el constructor y guardarlo como Iterable alcanza. Desde ya exigir Collection en el constructor funciona para el programa de prueba así que no es para penalizarlo pero estás exigiendo de más cuando podías pedir Iterable.
Hola, quería saber si mi resolución está bien (el testeo lo pasa) o si se le puede mejorar en algo. Mis dudas son:
Acá mi código:
Gracias!