在Java 8中做红宝石注入的优雅方式

时间:2015-12-08 18:15:54

标签: java loops java-8

String result = "";
for(String str : strings) {
    result = apply(result, str);
}
return result;

我想通过循环中的next元素传递一个操作的结果。在Java 8中有没有优雅的方法呢?

例如,在Ruby中,我们可以使用inject。

strings.inject("") { |s1, s2| apply(s1,s2) }

2 个答案:

答案 0 :(得分:8)

您可以使用scanf_s("%c", &x)

rsize_t

答案 1 :(得分:1)

如果您不介意添加第三方库,可以使用Eclipse Collections在其对象和原始容器上使用injectInto方法。 Eclipse Collections的灵感来自Smalltalk Collections API,它也启发了Ruby。以下是使用带有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;
}

注意:我是Eclipse Collections的提交者