EC by Example: Short-circuiting methods
Learn the methods in Eclipse Collections that short-circuit and return a result as soon as a condition is met.

What are the short-circuiting methods?
The short-circuiting methods in Eclipse Collections all take a Predicate
or Predicate2
as a parameter. We refer to them as short-circuiting methods because as soon as the condition is met for a particular algorithm, the loop is broken out of and a result is immediately returned.

The short-circuiting methods in Eclipse Collections are:
detect
/detectWith
— returns the first object that the predicate matches or null if none matchdetectIfNone
/detectWithIfNone
— returns the first object that the predicate matches or returns the result of evaluating the Function0detectOptional
/detectWithOptional
— returns an Optional with the first object that the predicate matches or Optional.empty()detectIndex
/detectLastIndex
(Ordered Only) — returns the index of the first or last object that the predicate matches or -1 if none matchanySatisfy
/anySatisfyWith
— returns true if the predicate matches any objectallSatisfy
/allSatisfyWith
— returns true if the predicate matches all of the objectsnoneSatisfy
/noneSatisfyWith
— returns true if the predicate doesn’t match any of the objects
The methods that include the suffix “With” all take Predicate2
, while the other methods take a Predicate
.
All of the examples in this blog are written using the Java 10 Local-Variable Type Inference feature (aka var
).
A few forms of detect
@Test
public void detect()
{
var mutableList =
mList("the", "quick", "brown", "fox", "jumps");
var immutableList =
iList("over", "the", "lazy", "dog");
var the1 =
mutableList.detect("the"::equals);
var the2 =
immutableList.detectIfNone("fox"::equals, () -> "the");
Assert.assertEquals(the1, the2);
var the3 =
mutableList.detectWith(Object::equals, "the");
var the4 =
immutableList.detectWithIfNone(Object::equals, "fox",
() -> "the");
Assert.assertEquals(the3, the4);
var the5 =
mutableList.detectOptional(s -> s.endsWith("e"));
var the6 =
immutableList.detectWithOptional(String::startsWith, "t");
Assert.assertEquals(the5.get(), the6.get());
}
Detecting the first and last index
@Test
public void detectIndex()
{
var mutableList =
mList("the", "quick", "brown", "fox", "jumps");
var immutableList =
iList("over", "the", "lazy", "dog");
var the1 = mutableList.detectIndex("the"::equals);
var the2 = immutableList.detectIndex("the"::equals);
Assert.assertEquals(0, the1);
Assert.assertEquals(1, the2);
var fox = mutableList.detectLastIndex("fox"::equals);
var dog = immutableList.detectLastIndex("dog"::equals);
Assert.assertEquals(3, fox);
Assert.assertEquals(3, dog);
}
Examples of Any/All/NoneSatisfy
@Test
public void anyAllNoneSatisfy()
{
var list = mList("the", "quick", "brown", "fox");
Assert.assertTrue(list.anySatisfy(s -> s.endsWith("e")));
Assert.assertFalse(list.anySatisfyWith(String::endsWith, "z")); Assert.assertFalse(list.allSatisfyWith(String::endsWith, "e"));
Assert.assertTrue(list.allSatisfy(s -> !s.isEmpty())); Assert.assertFalse(list.noneSatisfyWith(String::endsWith, "x"));
Assert.assertTrue(list.noneSatisfy(String::isEmpty));
}
Try out short-circuiting methods in the EC Katas
Here’s a few solutions demonstrating short-circuiting methods in Exercise #2 of the Eclipse Collections Pet Kata.

Check out this presentation to learn more about the origins, design and evolution of the Eclipse Collections API. There is also a video covering the slides that was recorded at an Eclipse Community Virtual Meet-up.
Eclipse Collections is open for contributions. If you like the library, you can let us know by starring it on GitHub.