我有这样的地图:
Map<Account, List<BrandAccount>> accountBrandMap = new HashMap<Account, List<BrandAccount>>();
现在我必须根据Key中的名字按字母顺序对此地图进行排序。这是我用过的代码:
List<Entry<Account, List<BrandAccount>>> entries = new ArrayList<Entry<Account, List<BrandAccount>>>(accountBrandMap.entrySet());
Collections.sort(entries, new Comparator<Entry<Account, List<BrandAccount>>>() {
@Override
public int compare(Entry<Account, List<BrandAccount>> o1,
Entry<Account, List<BrandAccount>> o2) {
String fname1 ="", fname2="";
fname1 = !isNull(o1.getKey().getFirst_name()) ? o1
.getKey().getFirst_name() : o1
.getKey()
.getEmail_address()
.substring(
0,
o1.getKey().getEmail_address()
.indexOf("@"));
fname2 = !isNull(o2.getKey().getFirst_name()) ? o2
.getKey().getFirst_name() : o2
.getKey()
.getEmail_address()
.substring(
0,
o2.getKey().getEmail_address()
.indexOf("@"));
return fname1.compareTo(fname2);
}
});
Map<Account, List<BrandAccount>> orderedMap = new LinkedHashMap<Account, List<BrandAccount>>();
for (Entry<Account, List<BrandAccount>> entry : entries) {
orderedMap.put(entry.getKey(), entry.getValue());
}
model.addAttribute("listvar", orderedMap);
问题是我得到了一个有序的键映射,但它不仅仅是一个有序映射。打印时,它给我两个排序数据:
{Anna,Belle,Elsa,Sandra,} {Ariel,Tisca}
它就像两个排序列表中的一个。我不知道为什么我这样得到它。
我正在显示如下输出:
<c:forEach items="${listvar}" var="Listvar">
<li class="accordion" id="rows${Listvar.key.account_id }">
<a href='#' class="group-li"><span>${Listvar.key.first_name} ${Listvar.key.last_name}</span> </a>
<ul class="" style="display: none; margin-top: 15px;">
<c:forEach items="${Listvar.value}" var="brandVal">
<li>
<a href=''>${brandVal.brand.company_name}</a>
</li>
</c:forEach>
</ul>
</li>
</c:forEach>
这是它的样子: https://www.dropbox.com/s/h83v223ims18q15/users.png?dl=0
请帮助。
感谢。