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.

Image for post
Image for post
Short-circuiting methods won’t leave you stuck in a loop for longer than necessary

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.

Image for post
Image for post
“the”::equals is the method reference equivalent of string -> “the”.equals(string)

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

Image for post
Image for post
Examples of anySatisfyWith, allSatisfy and detectWith from the Pet Kata

Written by

Java Champion. Creator of the Eclipse Collections OSS Java library (http://www.eclipse.org/collections/). Inspired by Smalltalk. Opinions are my own.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store