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