public Optional<Integer> futureRCQuorumReceived(
      final ConsensusRoundIdentifier currentRoundIdentifier) {
    // Iterate through elements of round summary, identify ones with round number higher than
    // current,
    // tracking minimum of those and return the next higher round number if quorum is reached

    // Filter out entries with round number greater than current round
    // and collect their round numbers
    Map<Address, Integer> higherRounds =
        roundSummary.entrySet().stream()
            .filter(entry -> isAFutureRound(entry.getValue(), currentRoundIdentifier))
            .collect(
                Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getRoundNumber()));

    LOG.debug("Higher rounds size ={} rcquorum = {}", higherRounds.size(), rcQuorum);

    // Check if we have at least f + 1 validators at higher rounds
    if (higherRounds.size() >= rcQuorum) {
      // Find the minimum round that is greater than the current round
      return Optional.of(higherRounds.values().stream().min(Integer::compareTo).orElseThrow());
    }

    // If quorum is not reached, return empty Optional
    return Optional.empty();
  }
Checks if a quorum of round change messages has been received for a round higher than the
current round

@param currentRoundIdentifier the current round identifier
@return the next higher round number if quorum is reached, otherwise empty Optional
consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/RoundChangeManager.java