如何编写返回具有 java8 功能的字符串的 for 循环?

Yek*_*soy -1 java for-loop java-8 java-stream

基本上我想要做的是用java 8特性编写一个像下面这样的for循环,

private String createHashCode() {
    for (int i = 0; i < MAX_TRY; i++) {
        final String hashCode = createRandomString();
        if (!ishashCodeExistence(hashCode)) {
            return hashCode;
        }
    }
    throw new HashCodeCollisonException();
}
Run Code Online (Sandbox Code Playgroud)

我试过的是;

private String createHashCode() {
    IntStream.range(0, MAX_TRY).forEach($ -> {
        final String hashCode = createRandomString();
        if (!ishashCodeExistence(hashCode)) {
            return hashCode;
        }
    });
    throw new HashCodeCollisonException();
}
Run Code Online (Sandbox Code Playgroud)

但是,lambda 中的 foreach 方法返回 void,因此我无法返回字符串。

有什么方法可以编写我的方法而不是使用普通的 for 循环?

sp0*_*00m 5

这里是你如何与流改写它,如果你真的想,虽然我个人比较喜欢好老for在这种特殊情况下循环:

private String createHashCode() {
    return IntStream
            .range(0, MAX_TRY)
            .mapToObj(x -> createRandomString())
            .filter(hashCode -> !ishashCodeExistence(hashCode))
            .findFirst()
            .orElseThrow(HashCodeCollisonException::new);
}
Run Code Online (Sandbox Code Playgroud)