03 martie 2017

Java8 (Streams, filtering) & Unit testing - exemplu dragut

package ch.makery.address;

import ch.makery.address.model.Person;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.*;

/** * Created by Geo on 3/3/2017. */
@RunWith(value = Parameterized.class)
public class StreamTest {

    public Map<String, List<Person>> people;

    @Before    public void init () {
        people = new HashMap<>();
        people.put("Bucharest", new ArrayList<Person>());
        people.put("Pitesti", new ArrayList<Person>());
        people.put("Timisoara", new ArrayList<Person>());
        people.put("Iasi", new ArrayList<Person>());
        people.put("Cluj", new ArrayList<Person>());

        people.get("Bucharest").add(new Person("Geo", "T", "Bucharest", 51081, 1969, 2, 21));
        people.get("Bucharest").add(new Person("Kate", "M", "Bucharest", 97124, 1999, 2, 21));
        people.get("Bucharest").add(new Person("Alex", "W", "Bucharest", 51081, 1999, 2, 21));
        people.get("Bucharest").add(new Person("Ana", "T", "Bucharest", 51081, 2009, 2, 21));

        people.get("Pitesti").add(new Person("Lena", "A", "Pitesti", 70503, 2009, 2, 21));
        people.get("Timisoara").add(new Person("Catalin", "F", "Timisoara", 51081, 2000, 2, 21));
        people.get("Iasi").add(new Person("Petri", "T", "Iasi", 51081, 1976, 2, 21));
        people.get("Cluj").add(new Person("Sahar", "A", "Cluj", 97124, 1977, 2, 21));
    }

    // @BeforeClass (optional)    // @After (optional)    // @Parameterized.Parameter
    @Parameterized.Parameter(value=0)
    public int age;

    @Parameterized.Parameter(value=1)
    public String city;

    @Parameterized.Parameter(value=2)
    public List<Integer> postalCodes;

    @Parameterized.Parameter(value=3)
    public String expected;

    @Parameterized.Parameters(name = "{index}: testFilterPersons({0},{1},{2}) => {3}")
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
                {18, "Bucharest", Arrays.asList(51081), "Geo T\nAlex W\n"},
                {18, "Cluj", Arrays.asList(51081, 97124), "Sahar A\n"}
        });
    }

    @Test    public void testFilterPersons() {
        assert(filterPersons(age,city,postalCodes).equals(expected));
    }


    private String filterPersons(int age, String city, List<Integer> postalCodes) { // why void?        // stream        return (people.get(city)).stream()
                .filter( person -> postalCodes.contains(person.getPostalCode()) && person.getAge() >= age)
                .map ( person -> person.getFirstName() + " " + person.getLastName())
                .reduce ("", (a,b) -> a+b+"\n");
    }

}

Niciun comentariu: