2016-08-11 10 views
-1

私はArrayListに以下のオブジェクトを持ちます。このオブジェクトの値は、最初の数字としてIdというものがあります。List内の値に基づいてn個のリストをマップにマージする

enter image description here

Iは、そのキー値IDを持つオブジェクトであるべきオブジェクトのIDであるべきMapオブジェクトを作成する必要があります。一日の終わりに、私はそのようなマップを持っていたいと思います。

enter image description here

私はすでにif文のループやたくさんのための2つでこの問題を解決してきたが、それは私には非常に醜いと思われます。

任意のクリーナーソリューションが評価されます。始まったばかりのリストを反復処理し、地図に要素を追加

ArrayList<Element> list = ...; 
HashMap<Integer, List<Element>> map = new HashMap<Integer, List<Element>>(); 

for(Element e : list) { 
    ArrayList<Element> auxList; 
    if(map.contains(e.getId()) { 
     auxList = map.get(e.getId()); 
    } else { 
     auxList = new ArrayList<Element>(); 
     map.put(e.getId(), auxList); 
    } 
    auxList.add(e); 
} 

+1

私は最初の画像を取得しません。どのようなリストについて話していますか? **最初の**要素がIDであるリストを持つことはできません。他の要素は別のものです。そして:マップはキーごとに1つの値を持ちます。ですから、本当に複数のエントリが必要な場合は、 'Map 'が必要です。 – GhostCat

+0

@GhostCatこれは単なるイラストです。これは非常に普通のリストであり、リストに含まれるオブジェクト内の値はIdとして示されています。私たちは、これはリスト内にあるオブジェクト内の単なる値であると言います。 –

+1

いくつかのコードを表示する必要があります。特に問題があります。これはコード作成サービスではありません。 – marstran

答えて

3
Map<Integer, List<Foo>> result = list.stream().collect(Collectors.groupingBy(Foo::getId)); 
0

編集質問の編集に合わせて、このような単純なです。マップにすでにIDが含まれている場合は、リストに追加します。そうでない場合は、新しいリストを作成します。

+0

私は私の質問を編集しました。私は今、それがはっきりしていると思う。 –

+0

@AdInfinitum私は私の答えを編集しました。それが役に立てば幸い。 –

関連する問題