[12、10、15、18] のような顧客 ID のリストがあります。それは、任意の順序で任意の他の番号にすることもできます。
オブジェクトのリスト (List customObjects ) があります。各オブジェクトには、0 番目の位置に customerId が含まれ、1 番目の位置に顧客名が含まれています。
customObjects[0] ---> Object[0] contains 10 as customer id and scott as customer name
customObjects[1] ---> Object[0] contains 12 as customer id and Mark as customer name
customObjects[2] ---> Object[0] contains 18 as customer id and Brian as customer name
customObjects[3] ---> Object[0] contains 15 as customer id and Pat as customer name
ここで、customerIds のリストと同じ順序で値を取得するマップを作成したいと考えています。
期待される結果 Map[12=>マーク、10=>スコット、15=>パット、18=>ブライアン
私の解決策(ただし、最適化されていません)
以下の単純なアルゴリズムでそれを達成できることは知っていますが、より最適化されたソリューションを探しています(コンパレータで達成できますか?私はそうは思いませんが)
public static void main(String[] args) {
List <Integer> custIds= Arrays.asList(12 , 10, 15, 18);
List <Object []> custObjects= new ArrayList<Object[]>();
Object [] custObject1 ={10,"Scott"};
Object [] custObject2 ={12,"Mark"};
Object [] custObject3 ={18,"Brian"};
Object [] custObject4 ={15,"Pat"};
custObjects.add(custObject1);
custObjects.add(custObject2);
custObjects.add(custObject3);
custObjects.add(custObject4);
Map custMap= new LinkedHashMap();
for(Integer custId : custIds){
for(Object [] custObject:custObjects){
if(custObject[0]==custId){
custMap.put(custObject[0], custObject[1]);
break;
}
}
}
System.out.println("map is"+custMap);
}
ループの反復を保存できる最適化されたソリューション(提案されたソリューションに似ているか、まったく異なるもの)を探しています。別の解決策として、まず、キーを custObject[0]、値を custObject[1] としてハッシュマップを準備します。次に、注文したいリストでループを実行し、ハッシュマップから値を取得して、リンクされたハッシュマップに入れます。