2017-09-06 40 views
1

我有一个模型和哈希映射的数组列表。模型类包含变量,如id(int),名称,地址等。哈希映射包含id(int)和distance(double)。我曾尝试使用Collection对模型列表进行排序,但这里的问题是,我必须按照距离值对散列图进行排序,然后根据散列图的排序方式来调整ArrayList。 hashmap的id和模型类id在这里充当“外键”。任何人有任何想法如何做到这一点?排序与哈希映射关联的模型ArrayList

这里是HashMap的:

HashMap<Integer, String> listDistance = new HashMap<Integer, String>(); 
listDistance.put(1, 3.22); 
listDistance.put(2, 2.57); 
listDistance.put(3, 6.32); 
listDistance.put(4, 8.82); 
listDistance.put(5, 1.32); 

这里是数组列表:

ArrayList<Listing> listings = new ArrayList<Listing>(); 
listing.add(1, "asd", 123); 
listing.add(2, "ghf", 3434); 
listing.add(3, "ert", 876); 
listing.add(4, "tyi", 1267); 
listing.add(5, "ohg", 1345); 

下面是模型类:

public class Listing { 

int id, count; 
String name; 

public Listing(int id, String name, int count) { 
    this.id = id; 
    this.count = count; 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public int getCount() { 
    return count; 
} 

public void setCount(int count) { 
    this.count = count; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

什么,我想应该排序的结果上市成为这样的:

  1. listing.add(5,“ohg”,1345);
  2. listing.add(2,“ghf”,3434);
  3. listing.add(1,“asd”,123);
  4. listing.add(3,“ert”,876);
  5. listing.add(4,“tyi”,1267);

我其实并没有试过任何东西,除了考虑逻辑流程以外,因为我对于如何做到这一点很不在意。

+2

显示您已经完成的工作。 – Orvenito

+1

尝试使用TreeMap代替HashMap ..,黑白向我们展示您的代码 –

+1

您可以发布您的模型的一些代码和您现在整理的方式。 – SachinSarawgi

回答

2

您可以对列表排序是这样的:

Collections.sort(listing, (a,b) -> Double.compare(listDistance.get(a.getId()), 
                listDistance.get(b.getId()))); 

看到IDEONE运行的代码。