2017-10-12 7 views
-1

私は以下のような2つのArrayListを持っています。共通の属性を持つオブジェクトを持つオブジェクトの別のリストと同じ順序でオブジェクトのリストを指定する

List<HashMap<String, String>> mapList; 
List<myclass> sortedDtos; 

sortedDtosはすでにソートされています。

`myclass` has a field called `jobNo` 
The HashMap has a key called `jobNo` 

基本的に私は、属性jobNoを比較することにより、sortedDtosに基づいてmapListを注文したいです。

Java 8でこれを行うにはどうすればよいですか?

これは正しく動作すると思われ、おそらくより効率的になる可能性もあります。

List<String> jobNos = new ArrayList(); 
      sortedDtos.stream().forEach(dto -> jobNos.add(dto.getJobNo())); 

      // sort maplist based on the sorting of the dtos 
      mapList.sort(Comparator.comparing(el -> jobNos.indexOf(el.get("jobNo")))); 
+0

サンプル入力と予想出力を入力してください。ここで何をしようとしているのかを理解することは難しいです。 –

+0

*これは正しく動作すると思われますが、おそらくもっと効率化することもできます* ... https://codereview.stackexchange.com/? – nullpointer

+0

この質問はスタック交換ネットワークの別のサイトに属しているため、この質問を議論の対象外としています。 - https://codereview.stackexchange.com/ – nullpointer

答えて

0

私は以下の方法を提案する。このアプローチでは、マップをソートする独自のカスタムコンパレータを用意する必要があります。

Collections.sort(mapList, new Comparator<HashMap<String, String>>() { 
     List<String> list = sortedDtos.stream().map(l -> l.jobNo).collect(Collectors.toList()); 
     public int compare(HashMap<String, String> map1, HashMap<String, String> map2) { 
      if(list.indexOf(map1.get("jobNo")) < list.indexOf(map2.get("jobNo"))) { 
       return -1; 
      } 
      else if(list.indexOf(map1.get("jobNo")) > list.indexOf(map2.get("jobNo"))) { 
       return 1; 
      } 
      else { 
       return 0; 
      } 
     } 
    }); 
関連する問題