// Path: RxPractice/app/src/main/java/ru/samples/itis/rxpractice/content/Person.java
// public class Person {
// 
//     private final String mName;
//     private final int mAge;
// 
//     public Person(@NonNull String name, int age) {
//         mName = name;
//         mAge = age;
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     public int getAge() {
//         return mAge;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         Person person = (Person) o;
//         return getAge() == person.getAge() && getName().equals(person.getName());
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = getName().hashCode();
//         result = 31 * result + getAge();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Person{" +
//                 "mName='" + mName + '\'' +
//                 ", mAge=" + mAge +
//                 '}';
//     }
// 
//     public int intValue() {
//         return getName().length() + getAge();
//     }
// 
//     @NonNull
//     public Person makeChild(@NonNull Person person) {
//         String name = getName() + " : " + person.getName();
//         return new Person(name, 0);
//     }
// 
//     @NonNull
//     public static Person randomPerson() {
//         Random random = new SecureRandom();
//         final String template = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
//                 "abcdefghijklmnopqrstuvwxyz";
// 
//         String name = randomString(random, template, random.nextInt(15) + 3);
//         int age = random.nextInt(100);
//         return new Person(name, age);
//     }
// 
//     @NonNull
//     public static List<Person> randomPersonsList(int size) {
//         List<Person> list = new ArrayList<>(size);
//         for (int i = 0; i < size; i++) {
//             list.add(randomPerson());
//         }
//         return list;
//     }
// 
//     @NonNull
//     private static String randomString(Random random, String characters, int length) {
//         char[] text = new char[length];
//         for (int i = 0; i < length; i++) {
//             text[i] = characters.charAt(random.nextInt(characters.length()));
//         }
//         return new String(text);
//     }
// }


import android.support.annotation.NonNull;
import java.util.List;
import ru.samples.itis.rxpractice.content.Person;
import rx.Observable;
package ru.samples.itis.rxpractice.tasks;




/**
 * @author Artur Vasilov
 */
public class RxJavaTask3 {

    /**
     * TODO : implement this method
     *
     * This method takes observable of list of persons as a parameter.
     * Note: observable may have more than one persons list
     *
     * 1) Transform observable of list of persons into single observable of all persons
     * 2) For each person in new observable double person name
     * 3) Remove same persons from observable
     * 4) Create observable of single integer
     *    which represents sum of calls Person#intValue for every persons
     * 5) Return observable from step 4
     *
     * @param observable - observable of persons list
     * @return observable with single integer values
     */
    @NonNull
    public static Observable<Integer> task3Observable(
// Path: RxPractice/app/src/main/java/ru/samples/itis/rxpractice/content/Person.java
// public class Person {
// 
//     private final String mName;
//     private final int mAge;
// 
//     public Person(@NonNull String name, int age) {
//         mName = name;
//         mAge = age;
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     public int getAge() {
//         return mAge;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         Person person = (Person) o;
//         return getAge() == person.getAge() && getName().equals(person.getName());
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = getName().hashCode();
//         result = 31 * result + getAge();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Person{" +
//                 "mName='" + mName + '\'' +
//                 ", mAge=" + mAge +
//                 '}';
//     }
// 
//     public int intValue() {
//         return getName().length() + getAge();
//     }
// 
//     @NonNull
//     public Person makeChild(@NonNull Person person) {
//         String name = getName() + " : " + person.getName();
//         return new Person(name, 0);
//     }
// 
//     @NonNull
//     public static Person randomPerson() {
//         Random random = new SecureRandom();
//         final String template = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
//                 "abcdefghijklmnopqrstuvwxyz";
// 
//         String name = randomString(random, template, random.nextInt(15) + 3);
//         int age = random.nextInt(100);
//         return new Person(name, age);
//     }
// 
//     @NonNull
//     public static List<Person> randomPersonsList(int size) {
//         List<Person> list = new ArrayList<>(size);
//         for (int i = 0; i < size; i++) {
//             list.add(randomPerson());
//         }
//         return list;
//     }
// 
//     @NonNull
//     private static String randomString(Random random, String characters, int length) {
//         char[] text = new char[length];
//         for (int i = 0; i < length; i++) {
//             text[i] = characters.charAt(random.nextInt(characters.length()));
//         }
//         return new String(text);
//     }
// }


// Path: RxPractice/app/src/main/java/ru/samples/itis/rxpractice/tasks/RxJavaTask3.java
import android.support.annotation.NonNull;
import java.util.List;
import ru.samples.itis.rxpractice.content.Person;
import rx.Observable;

package ru.samples.itis.rxpractice.tasks;




/**
 * @author Artur Vasilov
 */
public class RxJavaTask3 {

    /**
     * TODO : implement this method
     *
     * This method takes observable of list of persons as a parameter.
     * Note: observable may have more than one persons list
     *
     * 1) Transform observable of list of persons into single observable of all persons
     * 2) For each person in new observable double person name
     * 3) Remove same persons from observable
     * 4) Create observable of single integer
     *    which represents sum of calls Person#intValue for every persons
     * 5) Return observable from step 4
     *
     * @param observable - observable of persons list
     * @return observable with single integer values
     */
    @NonNull
    public static Observable<Integer> task3Observable(
            @NonNull Observable<List<Person>> observable) {