SonarQube: makes inefficient use of keySet iterator instead of entrySet iterator

Olá pessoal. Estou tentando resolver um problema reportado pelo sonarQube no seguindo trecho de código:

private void validarControlesDeViagemAtivos(ViagemControle viagem, Map<Long, Integer> conhecimentos) {
        var errors = this.getResponseData().getErrorMessage();
        List<ControleViagemValidacaoViagemDTO> controlesDocumento;
        List<Long> codigosCtes = new ArrayList<>(conhecimentos.keySet());

        controlesDocumento = this.buscarControleViagemPorCodigoDocumento(codigosCtes, viagem.getCodigo());
        boolean conhecimentoSemControles = false;
        StringBuilder conhecimentoSemControlesString = new StringBuilder("Os conhecimentos abaixo não possuem um controle de viagem ativo para esta unidade."
                +
                " Remova-os da viagem e inclua um controle de viagem válido. \n");

        for (Long codigo : conhecimentos.keySet()) {
            if (controlesDocumento.stream().anyMatch(doc -> doc.getCodigoConhecimento().equals(codigo))) {
                continue;
            } else {
                conhecimentoSemControles = true;
                conhecimentoSemControlesString.append("Conhecimento: ").append(conhecimentos.get(codigo).toString()).append("\n");
            }
        }

        if (conhecimentoSemControles) {
            errors.add(conhecimentoSemControlesString.toString());
        }
    }

e tenho essa crítica que não entendo como solucionar:


poderiam me ajudar nessa correção?

O que o sonar te está a sugerir é para, em vez de percorreres as keys do Map e depois no else acederes ao valor por chave, deves ser mais eficiente e percorrer, no teu for, os pares chave-valor. Assim, no else já tens o valor e não precisas de ir novamente ao map procurar pelo valor.

for (Map.Entry<Long,Integer> entry: conhecimentos.entrySet()) {
        if (controlesDocumento.stream().anyMatch(doc -> doc.getCodigoConhecimento().equals(entry.getKey()))) {
            continue;
        } else {
            conhecimentoSemControles = true;
            conhecimentoSemControlesString.append("Conhecimento: ").append(entry.getValue().toString()).append("\n");
        }
    }