Wednesday 11 October 2017

Different ways of collect the result using collect method of Java 8 Stream | Streams in Java 8


Click here to watch in Youtube :
https://www.youtube.com/watch?v=YsYwetn3_vA&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 + "]";
    }

}
StreamCollectDemo.java
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;

public class StreamCollectDemo
{
    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));
        
        /*
         * The collect() operation accumulates elements in a stream into a
         * container such as a collection. It performs mutable reduction
         * operation in which the reduced (final) value is a mutable result
         * container such as an ArrayList. This method takes a Collector
         * implementation that provides useful reduction operations. The
         * Collectors class is a common implementation in the JDK. And we are
         * going to see how it is used in the following examples.
         * 
         * The following code accumulates emails of the persons into a list
         * collection:
         */
        List<String> emailList = personList.stream() // Stream<Person>
                                           .map(p -> p.getEmail()) // Stream<String>
                                           .collect(Collectors.toList());

        System.out.println("emailList = "+ emailList);
        
        /*
         * We can specify exactly which type of collection as the result. For
         * example, the following code collects emails into a TreeSet:
         */
        Set<String> setEmails = personList.stream() // Stream<Person>
                .map(p -> p.getEmail()) // Stream<String>
                .collect(Collectors.toCollection(TreeSet::new));
        
        System.out.println("setEmails = "+ setEmails);
        
        /*
         * The following code groups the person by gender:
         */
        Map<Gender, List<Person>> byGenderMap = personList.stream()
                .collect(Collectors.groupingBy(p -> p.getGender()));

        System.out.println("Groups by gender = " + byGenderMap);
        
        /*
         * The following code accumulates names and concatenates them into
         * a String, separated by commas:
         */
        String names = personList.stream() //Stream<Person>
                                 .map(p -> p.getName()) // Stream<String>
                                 .collect(Collectors.joining(", "));
        
        System.out.println("names = "+names);
        
    }

}
Output
emailList = [alice@gmail.com, bob@gmail.com, carol@gmail.com, david@gmail.com, eric@gmail.com]
setEmails = [alice@gmail.com, bob@gmail.com, carol@gmail.com, david@gmail.com, eric@gmail.com]
Groups by gender = {FEMALE=[Person [name=Alice], Person [name=Carol]], 
                   MALE=[Person [name=Bob], Person [name=David], Person [name=Eric]]}
names = Alice, Bob, Carol, David, Eric

Refer: 
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html

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

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

Bitbucket Link:
https://bitbucket.org/ramram43210/java/src/17906082b9d83230789adc7b5df551c73ce2b46f/BasicJava/StreamDemo_diff_way_collect/?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