Wednesday, 6 September 2017

How to use flatMap method to convert Stream of Set to Stream of String | Streams in Java


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

Student.java
import java.util.HashSet;
import java.util.Set;

public class Student
{
    private String name;
    private Set<String> bookSet;

    public void addBook(String bookName)
    {
        if (this.bookSet == null)
        {
            this.bookSet = new HashSet<>();
        }
        this.bookSet.add(bookName);
    }

    public String getName()
    {
        return name;
    }

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

    public Set<String> getBookSet()
    {
        return bookSet;
    }

    public void setBookSet(Set<String> bookSet)
    {
        this.bookSet = bookSet;
    }

}
FlatMapDemo1.java
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FlatMapDemo1
{
    public static void main(String[] args)
    {

        Student student1 = new Student();
        student1.setName("Peter");
        student1.addBook("Java in Action");
        student1.addBook("Spring in Action");
        student1.addBook("Ruby in Action");

        Student student2 = new Student();
        student2.setName("John");
        student2.addBook("Java in Action");
        student2.addBook("Learning Java Script");

        List<Student> studentList = new ArrayList<>();
        studentList.add(student1);
        studentList.add(student2);

        /*
         * Stream<Set<String>>
         */
        Stream<Set<String>> setStream = studentList.stream()
                .map(student -> student.getBookSet());

        /*
         * Stream<Set<String>> to Stream<String>
         */
        Stream<String> stringStream = setStream // Stream<Set<String>>
                .flatMap(student -> student.stream()); // Stream<String>

        List<String> bookList = stringStream.distinct()
                .collect(Collectors.toList());

        bookList.forEach(bookName -> System.out.println(bookName));
    }

}
Output
Ruby in Action
Java in Action
Spring in Action
Learning Java Script

FlatMapDemo2.java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class FlatMapDemo2
{
    public static void main(String[] args)
    {
        Student student1 = new Student();
        student1.setName("Peter");
        student1.addBook("Java in Action");
        student1.addBook("Spring in Action");
        student1.addBook("Ruby in Action");

        Student student2 = new Student();
        student2.setName("John");
        student2.addBook("Java in Action");
        student2.addBook("Learning Java Script");

        List<Student> studentList = new ArrayList<>();
        studentList.add(student1);
        studentList.add(student2);

        List<String> bookList = studentList.stream()
                .map(student -> student.getBookSet()) // Stream<Set<String>>
                .flatMap(student -> student.stream()) // Stream<String>
                .distinct().collect(Collectors.toList());

        bookList.forEach(bookName -> System.out.println(bookName));
    }

}
Output
Ruby in Action
Java in Action
Spring in Action
Learning Java Script

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

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

Bitbucket Link:
https://bitbucket.org/ramram43210/java/src/53e39342c1c41555c6e548783b3cf96ab7bd9ee6/BasicJava/StreamDemo_flatmap_streamofset/?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