オブジェクトのリストが非常に多いので、属性の1つに基づいてオブジェクトの数を数えたいと思います。私が今持っているのは:
long low = myList.stream().filter(p -> p.getRate().equals("Low")).count();
long medium = myList.stream().filter(p -> p.getRate().equals("Medium")).count();
long high = myList.stream().filter(p -> p.getRate().equals("High")).count();
Java 8がこれをどのように処理するかはわかりませんが、パフォーマンスが心配です。とにかく、これらの3つの属性を1回の呼び出しでカウントできるようにすることはできますか?パフォーマンスを向上させるために?
マップまたはオブジェクトのリストを返すようなもの。
List
各オブジェクトの割合でグループ化し、発生数を数えることができます。オブジェクトがタイプであると仮定しますMyClass
:
Map<String, Long> map = myList.stream().collect(groupingBy(MyClass::getRate, counting()));
これによりMap
、キーがレートで、値がそのレートを持つリストの要素の数であるaが返されます。その後、それは単純に得ることの問題であり"Low"
、"Medium"
そして"High"
キーを。
groupingBy(classifier, downstream)
は、指定された分類子(ここでは、MyClass::getRate
)に従って要素をグループ化し、ダウンストリームコレクター(ここでは、counting()
)を使用して値の削減を実行するコレクターです。
注意:コードをコンパイルするには、次の静的インポートが必要です。
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加