import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name=" + name + ", age=" + age + "}";
    }
}

public class StreamExamples {

    public static void main(String[] args) {
      
        // 1
        System.out.println(numbers.stream().filter(integer -> integer % 2 == 0).reduce(0, Integer::sum));
        
        // 2
        List<String> words = Arrays.asList("abc","aba", "aaa", "abba", "bcbd");
        Consumer<String> consumer = s -> {
            StringBuilder reversedStr = new StringBuilder(s).reverse();
            if (reversedStr.toString().equals(s)){
                System.out.println("This is a palindrome");
            }
            else {
                System.out.println("This is not a palindrome");
            }
        };
        words.forEach(consumer);

        // 3
        List<Person> personList = Arrays.asList(
            new Person("Salitha", 26), new Person("Michael", 32), new Person("Jones", 24),
            new Person("Andrew", 20), new Person("Sam", 50), new Person("Ben", 27)
        );

        List<Person> personResult = personList.stream().filter( person -> person.getAge() > 25).collect(Collectors.toList());
        System.out.println("personResult: "+personResult);

        // 4
        System.out.println(numbers.stream().filter(integer -> integer % 2 != 0).reduce(0, Integer::max));

    }
}