最初の方法は前に言ったように簡単です
List<Product> matchingPrds = new ArrayList<Product>();
foreach(Product pr : mp.Values())
{
if(pr.getAttribute() == yourValue)
{
matchingPrds.add(pr);
}
}
return pr;
ただし、マップを繰り返すことは悪い考えです。これを複数回実行したい場合は、新しいコレクションへの保存を1回繰り返すことができます。コレクションはポインターのみを保存し、オブジェクトインスタンスは基本的に同じであるため、これはメモリを大量に消費しません。
したがって、使用法に応じて、user714965ソリューションを使用できます
例
Map<String,Map<Int,List<Product>> attrValueProductsMap = new HashMap<String,Map<Int,List<Product>>();
Stringが属性、つまりwidthである場合、intは値が300であり、リストにはこのAttribute、Intのすべての積が含まれます。タイプは、実装によって異なる場合があります。