どのように私はストリームにforループを変換し、途中でそれを破ることができますか?

user1888955:

どのように私は次のコードは、ストリーム形式に変換することができ、フィルタ、foreachのマップを試してみましたが、まだ何かが間違っています。

private Status validate(final Type type, final String id) {
    for(Validator validator : validators) {
        Status status = validator.validate(type, id);

        if (status == Status.INVALID || status == Status.VALID) {
            return status;
        }
    }

    return Status.UNKNOWN;
}
Mureinik:

レッツ・ブレーク、このループダウン。あなたは最初にすべてのバリデータおよびコールオーバー行くvalidateのです- map操作を。場合statusであるINVALIDVALID、あなたはそれを返す-それはだfilterと操作findFirstロジック。あなたがものを見つけることができない場合や、あなたが返すUNKNOWN-だというorElse操作。すべてを一緒に入れて:

private Status validate(final Type type, final String id) {
    return validators.stream()
                     .map(v -> v.validate(type, id))
                     .filter(s -> s == Status.INVALID || s == Status.VALID)
                     .findFirst()
                     .orElse(Status.UNKNOWN);
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=404328&siteId=1