java—使用intstream迭代和调用方法

lnxxn5zx  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(341)

在使用 IntStream ?

  1. public static void fizzBuzz(int n) {
  2. // The below does not work as it expects a return value.
  3. // Is there a different method that I could use to perform this?
  4. IntStream.range(1, n).map(n -> print(n));
  5. }
  6. private static void print(int n){
  7. boolean isDivisibleBy3 = n % 3 == 0;
  8. boolean isDivisibleBy5 = n % 5 == 0;
  9. if(isDivisibleBy3 && isDivisibleBy5){
  10. System.out.println("FizzBuzz");
  11. } else if (isDivisibleBy3){
  12. System.out.println("Fizz");
  13. } else if (isDivisibleBy5){
  14. System.out.println("Buzz");
  15. } else {
  16. System.out.println(n);
  17. }
  18. }
fafcakar

fafcakar1#

这个 map() 操作需要一个非void函数作为其输入,这样这个函数就可以应用于流中的每个元素并替换它们。使用 forEach() 相反。它可以对元素应用void函数。
也不要用 n 在你的lambda表情中。它已声明,无法覆盖。

  1. public static void fizzBuzz(int n) {
  2. IntStream.range(1, n).forEach(x -> print(x));
  3. }
qfe3c7zg

qfe3c7zg2#

正如其他人所指出的那样,你目前的方法并不适合你 map 因为你的职能是 void . 你可以绘制Map intString 不过。这种方法看起来像,

  1. private static String mapFizzBuzz(int n) {
  2. boolean isDivisibleBy3 = n % 3 == 0;
  3. boolean isDivisibleBy5 = n % 5 == 0;
  4. if (isDivisibleBy3 && isDivisibleBy5) {
  5. return "FizzBuzz";
  6. } else if (isDivisibleBy3) {
  7. return "Fizz";
  8. } else if (isDivisibleBy5) {
  9. return "Buzz";
  10. }
  11. return Integer.toString(n);
  12. }

如果你进一步使用 forEach . 比如,

  1. IntStream.range(1, n).mapToObj(x -> mapFizzBuzz(x)).forEach(System.out::println);
展开查看全部
cuxqih21

cuxqih213#

也许这就是你想要的。让方法返回字符串。然后使用 IntStream 迭代数字。然后将它们传递给Map int 返回的值是 String . 然后您只需打印该值。

  1. public class FizzBuzzStream {
  2. public static void main(String[] args) {
  3. int n = 20;
  4. IntStream.range(1, n).mapToObj(FizzBuzzStream::eval)
  5. .forEach(System.out::println);
  6. }
  7. private static String eval(int n) {
  8. boolean isDivisibleBy3 = n % 3 == 0;
  9. boolean isDivisibleBy5 = n % 5 == 0;
  10. if (isDivisibleBy3 && isDivisibleBy5) {
  11. return "FizzBuzz";
  12. }
  13. if (isDivisibleBy3) {
  14. return "Fizz";
  15. }
  16. if (isDivisibleBy5) {
  17. return "Buzz";
  18. }
  19. return Integer.toString(n);
  20. }
  21. }

印刷品

  1. 1
  2. 2
  3. Fizz
  4. 4
  5. Buzz
  6. Fizz
  7. 7
  8. 8
  9. Fizz
  10. Buzz
  11. 11
  12. Fizz
  13. 13
  14. 14
  15. FizzBuzz
  16. 16
  17. 17
  18. Fizz
  19. 19
展开查看全部
plupiseo

plupiseo4#

map 要将一个值转换为另一个值时使用。自 print 不返回任何内容(其返回类型为 void ),您不能使用 map . 你可以用 forEach 但是:

  1. IntStream.range(1, n).forEach(n -> print(n));

相关问题