Skip to main content

Java subList from ArrayList

How to get subList from ArrayList in Java?

In this article, we are going to learn how we can get a sublist from ArrayList in Java. By applying the starting and ending index, we can find a sublist from ArrayList. Also, we are going to see how to find a sublist in java based on some predicate.

If you are new to ArrayList, read this article first: All about ArrayList in Java.

Content of the Article


Java sublist by starting and ending index

The subList() method of ArrayList is used to find a sublist in java. This method returns a portion of an ArrayList based on the starting and ending index. Let's first look at the syntax of subList():
Syntax of subList()
List<T> subList = arrayList.subList(fromIndex, toIndex);
This method takes two integer arguments: fromIndex and toIndex as name suggests, fromIndex for starting index and toIndex for ending index. The toIndex is an exclusive type argument i.e., the element of ArrayList at toIndex location will not be included into the sublist.
Note : These index arguments can raise exception:
  • If fromIndex/toIndex are smaller than 0 or greater than the size of ArrayList then java.lang.IndexOutOfBoundException will be raised
  • If fromIndex > toIndex then java.lang.IllegalArgumentException will be raised.

Java sublist Example 1: Get sublist by starting and ending index

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListExample {
        public static void main(String[] args) {
                ArrayList<String> languageList = new ArrayList<>(
                        Arrays.asList("Java", "C++", "NodeJS", "JavaScript", "Python"));
                System.out.println("Original ArrayList: " + languageList);

                ArrayList<String> languageSubList = subListByIndex(languageList, 1, 4);
                System.out.println("SubList By index: " + languageSubList);
        }
        private static <T> ArrayList<T> subListByIndex(ArrayList<T> arrayList,
           int fromIndex, int toIndex) {
                try {
                        // Java sublist from ArrayList
                        List<T> subList = arrayList.subList(fromIndex, toIndex);
                        return new ArrayList<>(subList);
                } catch (IndexOutOfBoundsException | IllegalArgumentException  ex) {
                        System.out.println("Exceoption due to: " + ex.getMessage());
                        return null;
                }
        }
}
Output
Original ArrayList: [Java, C++, NodeJS, JavaScript, Python]
SubList By index: [C++, NodeJS, JavaScript]

Java sublist by Predicate

Above we have learned, how to get the sublist by index but sometimes there can be the scenario that we want to get the sublist from the ArrayList based on some condition. From the ArrayList, we can create a sublist in java containing all elements that satisfy the given predicate. To do this, we can use the methods provided by the java stream API and Predicate Functional interface.
Let's look at the example:

Java sublist Example 2: Get sublist by Predicate

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

public class ArrayListExample {
        public static void main(String[] args) {
                ArrayList<String> languageList = new ArrayList<>(
                                Arrays.asList("Java", "C++", "NodeJS", "JavaScript", "Python"));
                System.out.println("Original ArrayList: " + languageList);

                // String Predicate that filter all language containing "J"
                Predicate<String> languagePredicate = (String language) -> language.contains("J");

                ArrayList<String> languageSubListByPredicate 
                                = subListByPredicate(languageList, languagePredicate);
                System.out.println("SubList By Predicate: " + languageSubListByPredicate);
        }
        private static <T> ArrayList<T> subListByPredicate(ArrayList<T> arrayList, 
             Predicate<T> predicate) {
                // Java sublist by predicate
                List<T> subList = arrayList.stream().filter(predicate)
                                        .collect(Collectors.toList());
                return new ArrayList<>(subList);
        }
}
Output
Original ArrayList: [Java, C++, NodeJS, JavaScript, Python]
SubList By Predicate: [Java, NodeJS, JavaScript]

Related Posts:


Comments