Search code examples
javajava-stream

Merging two stream operation into one in Java for performance improvement


I have this object

Class A {

    int count;
    String name;

}

I have a list of my above custom object as below :

List<A> aList = new ArrayList<>();
A a = new A(1,"abc");
A b = new A(0,"def");
A c = new A(0,"xyz");

aList.add(a);
aList.add(b);
aList.add(c);

I will get this list as input in my service. Now based upon some scenario, first I need to set "count" to ZERO for all elements in the list and based on a check with "name" I need to set the count as ONE for a particular name.

This is how I am doing now :

String tempName = "Some Name like abc/def/xyz";

alist.stream().forEach(x -> x.setCount(0));
aList.stream().filter(x -> x.getName().equalsIgnoreCase(tempName))
              .findFirst()
              .ifPresent(y -> y.setCount(1));

This is doing my job, but I want to know if I can simplify the above logic and use one single stream instead of two and improve the performance by avoiding looping through the list twice.


Solution

  • Just check if the name matches in the first loop:

    alist.forEach(x -> x.setCount(x.getName().equalsIgnoreCase(tempName) ? 1 : 0));