Tuesday, 17 October 2017

How to accumulate the names of all persons using reduce method of Java 8 Stream | Streams in Java 8


Click here to watch in Youtube : 
https://www.youtube.com/watch?v=XKIG-i_2BVE&list=UUhwKlOVR041tngjerWxVccw

Person.java
enum Gender
{
    MALE, FEMALE
}

public class Person
{
    private String name;
    private String email;
    private Gender gender;
    private int age;

    public Person(String name, String email, Gender gender, int age)
    {
        super();
        this.name = name;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }

    public String getName()
    {
        return name;
    }

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

    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    public Gender getGender()
    {
        return gender;
    }

    public void setGender(Gender gender)
    {
        this.gender = gender;
    }

    public int getAge()
    {
        return age;
    }

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

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

}
StreamReduceDemo1.java
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class StreamReduceDemo1
{
    public static void main(String[] args)
    {
        List<Person> personList = new ArrayList<>();

        personList.add(new Person("Alice","alice@gmail.com",    Gender.FEMALE, 26));
        personList.add(new Person("Bob","bob@gmail.com", Gender.MALE, 32));
        personList.add(new Person("Carol","carol@gmail.com",Gender.FEMALE, 23));
        personList.add(new Person("David","david@gmail.com",    Gender.MALE, 39));
        personList.add(new Person("Eric","eric@gmail.com", Gender.MALE, 26));
        
        /*
         * 
         * Version #1: Optional<T> reduce(BinaryOperator<T> accumulator) - This
         * method performs a reduction on the elements of the stream, using an
         * associative accumulation function, and returns an Optional object
         * describing the reduced value.
         * 
         * For example, the following code accumulates names of all persons into
         * a String:
         */
        Optional<String> optional = personList.stream().map(p -> p.getName())
                .reduce((name1, name2) -> name1 + ", " + name2);

        if (optional.isPresent())
        {
            String names = optional.get();
            System.out.println(names);
        }

    }

}
Output
Alice, Bob, Carol, David, Eric

StreamReduceDemo2.java
import java.util.Arrays;

public class StreamReduceDemo2
{
    public static void main(String[] args)
    {
        int[] numberArray = { 2, 3, 5};

        /*
         * Version #2: T reduce(T identity, BinaryOperator<T> accumulator) -
         * This method is similar to the version #1, but it returns the reduced
         * value of the specified type T. The identity value must be an identity
         * value for the accumulator function, which means it does not affect
         * the result of accumulation.
         * 
         * The following code calculates sum of numbers in a stream:
         */
        int sum = Arrays.stream(numberArray).reduce(0, (x, y) -> (x + y));

        System.out.println("sum = " + sum);

    }

}
Output
sum = 10

Click the below link to download the code:
https://sites.google.com/site/ramj2eev1/home/javabasics/StreamDemo_reduce_accumulate.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/Java/tree/master/BasicJava/StreamDemo_reduce_accumulate

Bitbucket Link:
https://bitbucket.org/ramram43210/java/src/a9fa8aa6476993bce8a79f4d0e8f1799d1d35a7f/BasicJava/StreamDemo_reduce_accumulate/?at=master

See also:
  • All JavaEE Viedos Playlist
  • All JavaEE Viedos
  • All JAVA EE Links
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • No comments:

    Post a Comment