2016-10-30 3 views
1

私はずっと前にプログラミングを始めました。あなたの助けが必要です。私はObject1のListを持っています、Object1はItem1、Item2、Item3で構成されています。値のリストを別のJavaの値リストにマッピングする8

私はItem2でグループ化し、それぞれのItem2をObject1のリストでマップしたいと考えています。 Object1の各ListをItem3のリストにマップして、最後に私は別のItem3の数を数えたいと思いますそれぞれのItem List3に。

まもなく、私はObject1のList1にあるItem2あたりのItem3の数を数えたいと思います。これを行うには

は、ここで私はこれまでやっていることです:

Map<Item2, List<Object1>> object1GroupedByItem2 = object1List.stream().collect(Collectors.groupingBy(object1->object1.getItem2())); 

List<Entry<Item2, List<Object1>>> object1GroupedByItem2List = object1GroupedByItem2.entrySet().stream().collect(Collectors.toList()); 

Map<Item2, List<Item3>> item3GroupedByItem2 = object1GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().map(object1->object1.getItem3()).collect(Collectors.toList()))); 

List<Entry<Item2, List<Item3>>> item3GroupedByItem2List = item3GroupedByItem2.entrySet().stream().collect(Collectors.toList()); 

Map<Item2, List<Item3>> distinctItem3GroupedByItem2 = item3GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().distinct().collect(Collectors.toList()))); 

List<Entry<Item2, List<Item3>>> distinctItem3GroupedByItem2List = distinctItem3GroupedByItem2.entrySet().stream().collect(Collectors.toList()); 

Map<Item2, Long> nbItem3PerItem2 = distinctItem3GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().count()); 

を、私は同じことを行うには良い方法がなければならないことを、ほとんど確信しているが、私は方法がわかりません。.. 。 私を助けてもらえますか?事前に

おかげ

編集:

public class Object1 { 

    private Item1 item1; 
    private Item2 item2; 
    private Item3 item3; 

    public Object1(Item1 item1, Item2 item2, Item3 item3) { 
     this.item1 = item1; 
     this.item2 = item2; 
     this.item3 = item3; 
    } 

    public Item1 getItem1() { 
     return item1; 
    } 

    public void setItem1(Item1 item1) { 
     this.item1 = item1; 
    } 

    public Item2 getItem2() { 
     return item2; 
    } 

    public void setItem2(Item2 item2) { 
     this.item2 = item2; 
    } 

    public Item3 getItem3() { 
     return item3; 
    } 

    public void setItem3(Item3 item3) { 
     this.item3 = item3; 
    } 
} 

アイテム1、アイテム2とITEM3だけ文字列をラップしています。

エントリの一覧については、どうすれば削除できますか?私は私の地図を作るためにそれらを必要としないのですか?ここで

+0

我々は明らかに、彼らは一緒に関連する方法を理解するように、あなたが私たちのクラスオブジェクト1、アイテム1、アイテム2とITEM3の定義を示すべきです。また、コードを読みやすくするように書式を設定する必要があります。 – Heri

+0

私は、エントリのリストを取り除くことから始めます。それらは単に必要ではありません。 –

+0

これは設計上の悪夢のようですが、通常は 'x1'、' x2'、 'x3'を作りません。オブジェクトの複数のインスタンスを作成し、それらを配列/コレクションに格納します。命名も重要です。あなたが選んだ名前は非常にあいまいで混乱しています(私の頭の中で試して追跡することさえも) – Rogue

答えて

0

は私の質問への答えです:

Map<Item2, List<Object1>> object1GroupedByItem2 = object1List.stream().collect(Collectors.groupingBy(object1->object1.getItem2())); 

Map<Item2, Long> nbItem3PerItem2 = object1GroupedByItem2.entrySet().stream().collect(Collectors.toMap(entry->entry.getKey(), entry->entry.getValue().stream().map(object1->object.getItem3()).distinct().count()));            
関連する問題