Em java não há nada tão simples quanto em sql para fazer isso.
Seu problema tem duas partes:
Para a primeira parte, você pode usar a stream api:
Map<String, Long> somaDeValorPagoPorCpf = recebimentos.stream()
.collect(Collectors.groupingBy(Recebimento::getCpf,
Collectors.summingLong(Recebimento::getValorPago)));
Pode ser meio chato entender, mas o nome dos métodos é bem descriptivo: você agrupa pelo valor do método getCpf ao mesmo tempo usa a soma do método getValorPago para gerar um total por cpf.
Na segunda parte, idealmente, você deveria gerar um objeto para representar os outros dados que não geram totais (nome, outro dado qualquer). Para facilitar, vamos pegar um dos objetos Recebimento como base, e usar nome e outro dado qualquer de lá:
Map<String, Recebimento> recebimentoBasePorCpf = recebimentos.stream()
.collect(Collectors.toMap(Recebimento::getCpf, Function.identity(), (r1, r2) -> r1));
Ou seja, para cada cpf, escolhemos um Recebimento de onde usar as informaçoes de Nome e Outro Dado Qualquer.
Agora é percorrer os dois maps que tem para gerar a saída.