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

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

在使用 IntStream ?

public static void fizzBuzz(int n) {

    // The below does not work as it expects a return value.
    // Is there a different method that I could use to perform this?
    IntStream.range(1, n).map(n -> print(n));
}

private static void print(int n){
    boolean isDivisibleBy3 = n % 3 == 0;
    boolean isDivisibleBy5 = n % 5 == 0;

    if(isDivisibleBy3 && isDivisibleBy5){
        System.out.println("FizzBuzz");
    } else if (isDivisibleBy3){
        System.out.println("Fizz");
    } else if (isDivisibleBy5){
        System.out.println("Buzz");
    } else {
        System.out.println(n);
    }
}
fafcakar

fafcakar1#

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

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

qfe3c7zg2#

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

private static String mapFizzBuzz(int n) {
    boolean isDivisibleBy3 = n % 3 == 0;
    boolean isDivisibleBy5 = n % 5 == 0;

    if (isDivisibleBy3 && isDivisibleBy5) {
        return "FizzBuzz";
    } else if (isDivisibleBy3) {
        return "Fizz";
    } else if (isDivisibleBy5) {
        return "Buzz";
    }
    return Integer.toString(n);
}

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

IntStream.range(1, n).mapToObj(x -> mapFizzBuzz(x)).forEach(System.out::println);
cuxqih21

cuxqih213#

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

public class FizzBuzzStream {

    public static void main(String[] args) {

        int n = 20;

        IntStream.range(1, n).mapToObj(FizzBuzzStream::eval)
                .forEach(System.out::println); 

    }

    private static String eval(int n) {
        boolean isDivisibleBy3 = n % 3 == 0;
        boolean isDivisibleBy5 = n % 5 == 0;

        if (isDivisibleBy3 && isDivisibleBy5) {
            return "FizzBuzz";
        }
        if (isDivisibleBy3) {
            return "Fizz";
        }
        if (isDivisibleBy5) {
            return "Buzz";
        }
        return Integer.toString(n);
    }

}

印刷品

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
plupiseo

plupiseo4#

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

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

相关问题