没有控制流语句的Lambda

没有控制流语句的Lambda

This question already has answers here:
Simple way to repeat a String in java

(32个答案)


3年前关闭。




下周我们要与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 "";
};


您有什么想法或建议,我们如何捕捉负整数?

感谢和问候丹尼尔

最佳答案

您可以使用IntStream。

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

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


要么

如果指定的值小于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);

10-07 13:57