使用Collections.sort以字面方式排序

时间:2016-11-24 06:43:59

标签: java sorting collections

我有这样的地图:

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

请帮助。
感谢。

0 个答案:

没有答案