Skip to content

Java Con Patron

DiegoS edited this page Dec 15, 2017 · 8 revisions

Caso de prueba

    public void testReduceCollectionToOneWithoutTackingCareAboutTheOrder() {
        Competitor[]arrayOfEntities = {
                new EntityBar(),
                new EntityFoo()
        };

        EntityCollection ec = new EntityCollection(arrayOfEntities);
        assertEquals(new EntityFoo(), ec.winner());
    }

Código que resuelve el requerimiento

Esta es la porción de código que hace la reducción:

    public Competitor winner() {
        return this.competitors.stream()
                .reduce(
                    new NullEntity(), 
                    (Competitor a, Competitor b) -> a.challenge(b) 
                );

    };

Para saber que hace el challenge tenemos que mirar cada una de las instancias que componen la colección:

EntityBar

public class EntityBar implements Competitor {
    public Competitor challenge(Competitor another) {
        return another;
    }

}

EntityFoo

public class EntityFoo implements Competitor {

    public Competitor challenge(Competitor another) {
        // It allways prevails 
        return this;
    }

    // ...

}

NullEntity

public class NullEntity implements Competitor {
    public Competitor challenge(Competitor another) {
        return another;
    }
}

Como funciona?

  1. El reduce comienza con un valore inicial (NullEntity).
  2. NullEntity desafía a EntityBar y siempre pierde.
  3. EntityBar desafía a EntityFoo y siempre gana este último.
  4. EntityFoo prevalece!

Código completo aquí.

Calidad y cobertura

Como resultado de implementar esto obtuvimos el siguiente reporte de cobertura.

java coverage

Clone this wiki locally