Open In App

Using Guava’s Collectors for Collecting Streams to Immutable Collections in Java

Last Updated : 16 Mar, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Guava is a set of core libraries from Google that includes new collection types. For example, we multimap and multisets, immutable collections, a graph library, and utilities for concurrency. It is used by many companies. In this article, we are going to see how to use Guava’s Collectors for Collecting Streams to Immutable Collections in Java. To use guava we need to add Maven dependency. Otherwise, we have to add this library externally to our project.

Illustration:

<dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>22.0</version>
</dependency>

Let us go through the same important concepts involving methods been involved prior before jumping to implementation for clarity’s sake of understanding. The concept of streams plays a major role here that is been introduced in Java 8. A stream represents a sequence of elements and supports different kinds of operations to perform computations or bulk operations on those elements.

  • A stream is not a data structure instead it takes input from the Collections, Arrays or I/O channels.
  • Streams don’t change the original data structure, they only provide the result as per the pipelined methods.
  • Each intermediate operation is lazily executed and returns a stream as a result, hence various intermediate operations can be pipelined. Terminal operations mark the end of the stream and return the result.

Syntax:

static IntStream range (int start, int end)

Return type: An integer stream

Description: This method is used to return a sequential order of Integer Stream

Stream intStream boxed()

Return type: Stream

Description: This method returns Stream consisting of the elements of this stream

Example 1:

Java




// Java Program to illustrate Use Guava's Collectors
// for Collecting Streams to Immutable Collections
 
// Importing utility classes from java.util package
// Importing guava Library
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
 
// Main class
public class App {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating a stream of Integers from 0 to 9
        // by using boxed method converting that stream
        // into stream of elements
        List<Integer> list
            = IntStream.range(0, 9).boxed().collect(
                ImmutableList.toImmutableList());
        // printing the list
        System.out.println(list);
    }
}


 

 

Output:

 

[0, 1, 2, 3, 4, 5, 6, 7, 8]

Note: In the above output we have printed an immutable list of Integers. If we try to modify the list, it will throw an UnsupportedOperationException.

 

Example 2:

 

Java




// Java Program to illustrate Use Guava's Collectors
// for Collecting Streams to Immutable Collections
// Where UnsupportedOperationException is thrown
 
// Importing utility classes from java.util package
// Importing Guava library
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
 
// Main class
public class App {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating a stream of Integers from 0 to 9
        // by using boxed method converting that stream
        // into stream of elements
        List<Integer> list
            = IntStream.range(0, 9).boxed().collect(
                ImmutableList.toImmutableList());
 
        // Adding more elements to immutatble list
        // Note: Trying to add
        list.add(12);
        list.add(13);
        list.add(14);
 
        // Print and display the List
        System.out.println(list);
    }
}


 

 

Output:

 

Exception in thread "main" java.lang.UnsupportedOperationException
at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:220)
at james.App.main(App.java:15)

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads