2016-11-20 8 views
1

Productクラスのオブジェクトのリストを製品タイプ別にグループ化しようとしています。残念ながら、Productクラスが書かれている方法は、このようなものです:マップ値を使用してJava 8でストリームを使用するグループ

class Product { 
    Map<String, String> property; 
} 

製品クラスは、プロパティの一つが「でProductType」と呼ばれているプロパティのマップが含まれています。たとえば、地図には次の情報を含めることができます。

ProductType : Machine 
Price : 1000 
Name : Motor Cutter 
...... 

GoogleにはProductのリストがあります。私は、Java 8のストリームとlamda式を使用してProductTypeでグループ化する正しい方法がMap<String, List<Product>>になると考えています。

class Product { 
    String ProductType; 
    Double Price; 
    String Name; 
} 

しかし、私たちが一番上に持って定義して、私はこれを実装する方法が分からない:Productクラスは次のように定義されていた場合

答えは明白です。

誰かが助けることができますか?

+0

あなたが行ったストリームを表示できますか? – brummfondel

答えて

4

あなたはまだgroupingByを使用することができます。

List<Product> products = ... 
Map<String, List<Product>> groups = 
    products.stream() 
      .filter(p->p.property.containsKey("ProductType")) 
      .collect(Collectors.groupingBy(p->p.property.get("ProductType"))); 

私は出力Mapnullキーを避けるためにfilterステップを追加しました。

+1

あるいは 'groupingBy(p-> p.property.getOrDefault(" ProductType "、" ** No Type ** "))'のようなものを使用してください。 – Holger

関連する問題