gpt4 book ai didi

lambda - 使用 JDK8 Lambda 的 FizzBu​​zz

转载 作者:行者123 更新时间:2023-12-02 15:38:05 24 4
gpt4 key购买 nike

只是想通过 JDK8 lambda 看看程序能有多小,我的方法是使用结果生成器:

IntStream.rangeClosed(0 , 100).forEach(i ->{
StringBuffer bfr= new StringBuffer();
if(i % 3 == 0 )
bfr.append("Fizz");
if(i % 5 == 0 )
bfr.append("Buzz");
if(i % 3 != 0 && i % 5 != 0 )
bfr.append(i);

System.out.println(bfr.toString());
});

任何人都可以尝试使用谓词来代替吗?我想不出有什么办法可以做到这一点。

最佳答案

以下是三种解决方案。

带有流的 Java 8:

IntStream.rangeClosed(0, 100).mapToObj(
i -> i % 3 == 0 ?
(i % 5 == 0 ? "FizzBuzz" : "Fizz") :
(i % 5 == 0 ? "Buzz" : i))
.forEach(System.out::println);

Java 8 与 Eclipse Collections :

IntInterval.zeroTo(100).collect(
i -> i % 3 == 0 ?
(i % 5 == 0 ? "FizzBuzz" : "Fizz") :
(i % 5 == 0 ? "Buzz" : i))
.each(System.out::println);

Java 8 与使用谓词的 Eclipse 集合:

Interval.zeroTo(100).collect(
new CaseFunction<Integer, String>(Object::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.each(System.out::println);

更新:

作为 Eclipse 集合 8.0 release ,Eclipse Collections 中的函数接口(interface)现在扩展了 Java 8 中的等效函数接口(interface)。这意味着 CaseFunction现在可以用作java.util.function.Function ,这意味着它将与 Stream.map(Function) 一起使用。以下示例使用 CaseFunctionStream<Integer> :

IntStream.rangeClosed(0, 100).boxed().map(
new CaseFunction<Integer, String>(Object::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.forEach(System.out::println);

更新:

作为 Eclipse 集合 8.1 release ,现在支持原始 case 函数。上面的代码现在可以编写如下,删除对 boxed 的调用。 IntCaseFunction实现IntToObjectFunction延伸java.util.function.IntFunction .

IntStream.rangeClosed(0, 100).mapToObj(
new IntCaseFunction<>(Integer::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.forEach(System.out::println);

IntCaseFunction也将与 IntInterval 一起使用例如,作为参数传递给 collect方法。

注意:我是 Eclipse Collections 的提交者.

关于lambda - 使用 JDK8 Lambda 的 FizzBu​​zz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com