2017-10-12 72 views
-1

我有兩個像下面那樣的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; 
      } 
     } 
    }); 
相關問題