没有控制流语句的Lambda

时间:2017-01-07 16:04:04

标签: java lambda java-8 java-stream

我们在下周与Lambdas一起完成了一项任务。 我们应该编写一些没有控制流语句的Lambda。

示例:
我们得到一个字符串,这个字符串应该重复n次。 示例:(string,3) - > stringstringstring。 常见的问题是,我们不知道,如何抓住,例如-9或0。 我的代码如下所示:

BiFunction<Integer, String, String> nAnhaengen 
    = (n, word) -> {
    Stream.iterate(word, wordAdd-> word + wordAdd).
    limit(n).
    skip(n-1).          
    forEach(element -> System.out.println(element));
    return "";
};

你有想法或者tipps,我们如何捕捉负整数?

谢谢和问候丹尼尔

1 个答案:

答案 0 :(得分:1)

您可以使用IntStream。

int n = -1;
String word = "string";

String string = IntStream.range(0, n).mapToObj(a -> word).reduce(String::concat).orElse("");
System.out.println(string);

OR

如果指定的值小于0

,则将代码更改为限制为0
string = Stream.iterate(word, a -> a).limit(Math.max(0, n)).reduce(String::concat).orElse("");
System.out.println(string);

编辑:
正如@Tunaki建议的那样 使用Foreach和StringBuilder,因为String :: concat会导致创建许多不必要的不​​可变字符串。

String string = IntStream.range(0, n).mapToObj(a -> word).collect(Collectors.joining())
System.out.println(string);