如何为返回具有java8特性的字符串的循环编写代码?

ycggw6v2  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(279)

基本上我想做的是用Java8特性编写一个for循环,如下所示,

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

我尝试的是;

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

但是,lambda中的foreach方法返回void,因此无法返回字符串。
有没有办法写我的方法而不是使用普通for循环?

r6l8ljro

r6l8ljro1#

下面是如果你真的想用流重写它的方法,尽管我更喜欢好的旧版本 for 在此特定情况下循环:

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

相关问题