使用 IntStream 迭代和调用方法

问题描述

如何在使用 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="content"> <ul id="sidebar" class="menu-expanded"> <li id="li"><a href="#">This is link</a></li> <li><a href="#">This is link</a></li> <li><a href="#">This is link</a></li> <li><a href="#">This is link</a></li> <li><a href="#">This is link</a></li> </ul> <div class="main"> Lorem ipsum dolor sit amet,consectetur adipisicing elit. Natus ex,voluptatum error itaque provident totam ratione,quaerat reprehenderit accusantium omnis veniam voluptatibus fugiat ducimus,eos,consequuntur perferendis fugit adipisci dolores. </div> </div> <button id="menu-btn">MENU</button> 迭代范围时调用函数来打印值?

IntStream

解决方法

也许这就是你想要的。让方法返回字符串。然后使用 IntStream 遍历数字。然后将这些传递给将 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
,

map() 操作需要一个非空函数作为其输入,因此该函数可以应用于流中的每个元素并替换它们。 请改用 forEach()。它可以对您的元素应用 void 函数。

也不要在 lambda 表达式中使用 n。它已经声明并且不能被覆盖。

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

map 用于将一个值转换为另一个值。由于 print 不返回任何内容(其返回类型为 void),因此您不能使用 map。不过,您可以改用 forEach

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

正如其他人所指出的,您当前的方法不适用于 map,因为您的函数是 void。不过,您可以int 映射到 String。该方法可能看起来像,

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);