2017-10-12 101 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; 
      } 
     } 
    }); 
相关问题