如何根据分数出现时的键对地图进行排序

时间:2017-10-18 05:57:16

标签: java algorithm

我有一张地图

map.put("100_101","lll")
map.put("100_102","lll")
map.put("100_101_103","lll")
map.put("100_101_104","lll")
map.put("100","lll")

预期结果是按下划线出现的映射键数排序。

map.put("100","lll")
map.put("100_101","lll")
map.put("100_102","lll")
map.put("100_101_103","lll")
map.put("100_101_104","lll")

4 个答案:

答案 0 :(得分:0)

Java 7根据docs在数字文字中允许下划线(“_”)。 可以在这里使用TreeMap,地图根据其键的自然顺序进行排序

    TreeMap<Integer, String> map = new TreeMap<>();
    map.put(100_101,"lll");
    map.put(100_102,"lll");
    map.put(100_101_103,"lll");
    map.put(100_101_104,"lll");
    map.put(100,"lll");

    for(Entry<Integer,String> entry : map.entrySet()) {
          Integer key = entry.getKey();
          String value = entry.getValue();
          System.out.println(key + " => " + value);
    }

这可以胜任!

答案 1 :(得分:0)

树图根据其键的自然顺序排序。所以你可以使用TreeMap<String>。找到这个link

如果您使用HashMap<String>,则可以执行以下操作

按排序顺序获取所有密钥,如下所示

Set<String> sortedKeys = new TreeSet<>(map.keySet());

List<String> sortedKeys=new ArrayList<>(map.keySet());
Collections.sort(sortedKeys);

然后遍历此Set或List并从Map获取值并打印。

答案 2 :(得分:0)

使用SortedMap&amp; TreeMap的

您的代码应该是这样的:

 SortedMap<String, String>   map = new TreeMap<>(new Comparator<String>() {
   @Override
   public int compare(String o1, String o2) {
   if(o1.length()==o2.length()&&o1.contains("_")&&o1.contains("_"))
  {
       String temp1,temp2;
   temp1=o1.substring(o1.lastIndexOf("_"));
    temp2=o2.substring(o2.lastIndexOf("_"));
    return temp1.compareTo(temp2);
   }
   else  if(o1.length()>o2.length())
  {

    return 1;
   }
   else  if(o1.length()<o2.length())
  {

    return -1;
   }
    return o1.compareTo(o2);
   }
 });

 map.put("100_101","lll");
 map.put("100_102","lll");
 map.put("100_101_103","lll");
 map.put("100_101_104","lll");
 map.put("100","lll");

 System.out.println(map);

请参阅Java tutorial page for SortedMap.

答案 3 :(得分:0)

此处尝试此操作,因为我可以看到您要根据import { UsernameService } from './username.service'; import { Injectable, OnInit } from '@angular/core'; import 'rxjs/Rx'; @Injectable() export class AnotherService { username: any[] = []; constructor(private getUsernameService: UsernameService) { } someMethod() { let myFinalValue = this.getUsernameService.getUsername() .subscribe(username => this.username = username.data[0].AccountName); console.log(myFinalValue); } } 的最后Integer进行排序,例如根据String要排序的100_101。您需要实现101来满足此要求。这是代码:

comparator