Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带控制流语句的Lambda_Java_Lambda_Java 8_Java Stream - Fatal编程技术网

Java 不带控制流语句的Lambda

Java 不带控制流语句的Lambda,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我们下周有一个任务要和Lambdas一起完成。 我们应该编写一些没有控制流语句的lambda。 例子: 我们有一个字符串,这个字符串应该重复n次。 示例:string,3->stringstring。 常见的问题是,我们不知道如何抓到9或0。 我的代码如下所示: BiFunction<Integer, String, String> nAnhaengen = (n, word) -> { Stream.iterate(word, wordAdd-> wo

我们下周有一个任务要和Lambdas一起完成。 我们应该编写一些没有控制流语句的lambda。 例子: 我们有一个字符串,这个字符串应该重复n次。 示例:string,3->stringstring。 常见的问题是,我们不知道如何抓到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 "";
};
你有没有一个想法或者技巧,我们如何捕捉负整数

感谢和问候Daniel

您可以使用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);

有什么问题吗?@Tunaki我们必须使用不同参数的lambdas:/@DanielFGA so n,word->String.join,Collections.nCopiesn,word不工作?如果n为负,nCopies将抛出异常。所以这应该在之前处理好。使用Math.max0,n作为nCopies的参数可以处理它。。。如果您可以在没有控制流语句的情况下调用它。假设你想返回一个空字符串,如果它是负数的话……reduceString::concat会非常慢,因为它连接的字符串是不可变的,所以会创建很多新的字符串实例。这个具体的例子在docs self@Tunaki中引用,感谢您的建议:编辑答案以使用StringBuilder。没有forEach,有一种正确的方法可以做到这一点,请参阅前面评论中的链接文档,以及使用collect。它确保流可以并行运行,而不会出现任何问题,就像您在这里使用forEach时遇到的问题一样。@Tunaki但collect通常会将字符串作为列表或集合进行收集,因此它不会将请求的问题提供给连接的输出,对吗?i、 例如,字符串为string,输入为3。是否有一种方法可以使用Streams.collect在单个字符串中收集结果?如果使用,则是。