Como eu poderia melhorar esta iteração Lista com um Stream?

Wayneio:

Eu estou tentando contar o número de vezes que um Int é visto em um campo dentro de uma lista de objetos.

Este é o código que eu tenho

TreeMap<Integer, Double> ratings = new TreeMap();
ArrayList<Establishment> establishments = new ArrayList<>();

double one = 0;
double two = 0;
double three = 0;
double five = 0;

for (Establishment e : establishments) {
    if (e.getRating() == 1) {
        one++;
    }
    if (e.getRating() == 2) {
        two++;
    }
    if (e.getRating() == 3) {
        three++;
    }
    if (e.getRating() == 5) {
        five++;
    }
}

    ratings.put(1, (one / establishments.size()) * 100);
    ratings.put(2, (two / establishments.size()) * 100);
    ratings.put(3, (three / establishments.size()) * 100);
    ratings.put(5, (five / establishments.size()) * 100);

ainda não é ideal, se mais avaliações são adicionados (digamos 20 +) então você tem um monte de duplas que está sendo criado, e não é sustentável.

Eu sei que eu poderia fazer algo com um fluxo se eu tinha uma lista de ints, digamos

listOfInts.stream().filter(i -> i == 3).count()

no entanto, esta é uma lista de objetos, que contêm um int e eu preciso calcular o número de classificações == X na lista de objetos.

assim pseudocódigo para o que eu preciso:

establishemnts.getAllRatings () fluxo () de filtro.. (ratings -> classificações == 3) .count () *

* Repetir para cada um dos tipos de classificação 1 - 5

** Não há getAllRatings - Eu acho que é o problema que estou tentando resolver)

Aarish Ramesh:

Aqui está como você pode implementar getAllRatings usando fluxos para obter a lista de classificações

List<Integer> attributes = establishments.stream().map(es -> es.getRating()).collect(Collectors.toList());

Assim, para obter a contagem de classificações para uma classificação especial que você pode usar

establishments.stream().map(es -> es.getRating()).collect(Collectors.toList()).stream().filter(ratings -> ratings == 3).count()

Se você quiser obter as classificações de contagem / porcentagem para todos os ratings em seguida, por favor use o código na resposta da @ Marek

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=177748&siteId=1
Recomendado
Clasificación