IntStream代替无条件的for循环

时间:2018-12-29 03:29:19

标签: java java-stream

为回答我的问题,用户nullpointer在这里建议-https://stackoverflow.com/a/53905940/10824969如何使用/admin/login /client/query /agent/update 将for循环转换为流方式。

我有一个类似的for循环条件,可以对其进行迭代

axios.post('/api/admin/login'),
axios.post('/api/client/query'),
axios.post('/api/agent/update')

location /api {
    proxy_pass http://127.0.0.1:8080$request_uri;
    proxy_set_header Host 127.0.0.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

尝试将其转换为

IntStream.iterate

以上代码中的IDE警告。我还尝试使用void printMultiples(int number, int threshold) { for (int i = number; ; i = i + threshold) { if (i < threshold) { break; } else { System.out.println(i); } } } 检查倍数,下面改为打印所有数字

IntStream.iterate(number, i -> i + number).forEach(System.out::println);
                                              ^^
// Non-short-circuit operation consumes the infinite stream

1 个答案:

答案 0 :(得分:5)

您可以{ @Test //invalid public void test_sendMessageToRouteChannel() { userReportWriteCompletedRouteChannel.send(createMessageWithIp()); }

filter

或者如果选择Java-9或更高版本,则可以使用

IntStream.range(number, threshold)
    .filter(i -> i % number == 0) // only those divisible by number
    .forEach(System.out::println);

或更合理地听起来像是while循环,请使用Intstream.takeWhile作为:

IntStream.iterate(number, i -> i < threshold, i -> i + number)
        .forEach(System.out::println);