How to search in a List of Java object


I have a List of object and the list is very big. The object is

class Sample {
    String value1;
    String value2;
    String value3;
    String value4;
    String value5;

Now I have to search for a specific value of an object in the list. Say if value3=='three' I have to return those objects (My search is not always based on value3)

The list is

List<Sample> list = new ArrayList<Sample>();

What is the efficient way of doing it?


This question is tagged with java list search collections

~ Asked on 2012-10-30 12:28:07

The Best Answer is


You can give a try to Apache Commons Collections.

There is a class CollectionUtils that allows you to select or filter items by custom Predicate.

Your code would be like this:

Predicate condition = new Predicate() {
   boolean evaluate(Object sample) {
        return ((Sample)sample).value3.equals("three");
List result = list, condition );


In java8, using Lambdas and StreamAPI this should be:

List<Sample> result =
     .filter(item -> item.value3.equals("three"))

much nicer!

~ Answered on 2012-10-30 13:31:53


Using Java 8

With Java 8 you can simply convert your list to a stream allowing you to write:

import java.util.List;

List<Sample> list = new ArrayList<Sample>();
List<Sample> result =
    .filter(a -> Objects.equals(a.value3, "three"))

Note that

  • a -> Objects.equals(a.value3, "three") is a lambda expression
  • result is a List with a Sample type
  • It's very fast, no cast at every iteration
  • If your filter logic gets heavier, you can do list.parallelStream() instead of (read this)

Apache Commons

If you can't use Java 8, you can use Apache Commons library and write:

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;

Collection result =, new Predicate() {
     public boolean evaluate(Object a) {
         return Objects.equals(((Sample) a).value3, "three");

// If you need the results as a typed array:
Sample[] resultTyped = (Sample[]) result.toArray(new Sample[result.size()]);

Note that:

  • There is a cast from Object to Sample at each iteration
  • If you need your results to be typed as Sample[], you need extra code (as shown in my sample)

Bonus: A nice blog article talking about how to find element in list.

~ Answered on 2014-09-06 18:52:02

Most Viewed Questions: