If you don't mind adding a third-party library, you could use Eclipse Collections which has injectInto
methods on its object and primitive containers. Eclipse Collections was inspired by the Smalltalk Collections API which also inspired Ruby. Here are some examples of using object (mutable and immutable) and primitive (mutable and immutable) containers with injectInto
.
@Test
public void inject()
{
MutableList<String> strings1 = Lists.mutable.with("1", "2", "3");
Assert.assertEquals("123", strings1.injectInto("", this::apply));
ImmutableList<String> strings2 = Lists.immutable.with("1", "2", "3");
Assert.assertEquals("123", strings2.injectInto("", this::apply));
IntList ints = IntLists.mutable.with(1, 2, 3);
Assert.assertEquals("123", ints.injectInto("", this::applyInt));
LazyIterable<Integer> boxedInterval = Interval.oneTo(3);
Assert.assertEquals("123", boxedInterval.injectInto("", this::applyInt));
IntList primitiveInterval = IntInterval.oneTo(3);
Assert.assertEquals("123", primitiveInterval.injectInto("", this::applyInt));
}
public String apply(String result, String each)
{
return result + each;
}
public String applyInt(String result, int each)
{
return result + each;
}
Note: I am a committer for Eclipse Collections