どのように私はストリームと、このリストの反復を向上させることができますか?

Wayneio:

私は、INTがオブジェクトのリスト内のフィールドに見られた回数をカウントしようとしています。

これは私が持っているコードです。

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);

まだ多くの評価が追加された場合、それは、あなたが作成されてダブルスの束を持っていると思います(20+言う)、理想的ではない、そしてそれは、保守ではありません。

私は言う、私はint型のリストを持っていた場合、私はストリームで何かを行うことができます知っています

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

まだこれはint型が含まれていると私は、オブジェクトのリストで評価== Xの数を計算する必要があるオブジェクトのリストです。

私は必要なもののための擬似コードので:

establishemnts.getAllRatings()ストリーム()フィルター(評価 - >評価== 3)。。.count()*

*評価のタイプ1のそれぞれに対して繰り返す - 5

**何getAllRatingsはありません - 私はそれは私が解決しようとしている問題だと思います)

Aarishラメシュ:

ここでは、評価のリストを取得するためにストリームを使用してgetAllRatingsを実装する方法であります

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

特定の格付けのための評価のカウントを取得するので、あなたが使用することができます

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

あなたが取得したい場合は評価はカウント/すべての評価のための割合は、その後、マレック答え@内のコードを使用してください

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177749&siteId=1