2016-04-27 58 views
1

在網頁上找到的單詞並將它們與它們的出現次數進行映射後,如何按頻率(從最高到最低)對它們進行排序?排序沒有比較器,陣列列表或樹集的地圖

我有權訪問的唯一導入是數組,HashMap,HashSet,Map和Set。我研究瞭如何做到這一點,但似乎大多數人都建議使用比較器或迭代器,我不想實現它們。

該地圖設置如下:Map found = new HashMap <>();

這是我到目前爲止有:

import java.util.Arrays; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Set; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import util.WebDoc; 

public class Sorting{ 

public static void main(String[] args) throws IOException { 
String url; 

url = 「INSERT URL HERE」; 

final int numPairs = 30; // maximum number of pairs to print 

// get body of the web document 
String content = WebDoc.getBodyContent(url); 
String word_pattern = "[A-Za-z]{5,}"; 
Map<String, Integer> found = new HashMap<>(); // (word,frequency) 

Matcher match = Pattern.compile(word_pattern).matcher(content); 
int unique = 0; 
while (match.find()) { 
    String word = match.group().toLowerCase(); 

    System.out.println(word); 

     if (found.containsKey(word)){ 
      if (found.get(word)==1) 
       unique--; 
      found.put(word, found.get(word) +1); 
     } 
     else{ 
      found.put(word, 1); 
      unique++; 
     } 
    } 
} 
+0

你確定你不是[保羅](http://stackoverflow.com/q/36871699/1553851)? – shmosel

+1

*「...大多數人建議使用比較器或迭代器......」* - 有一個原因 - *「......我不想實現。」* - 爲什麼不呢? – azurefrog

+0

如果有人想讓你的代碼沒有迭代器,他們要麼是巨魔,要麼他們不知道迭代器是什麼。 – shmosel

回答

0

如果你改變主意使用基本JDK的實用程序,在這裏與流做這件事:

List<String> sorted = found.entrySet() 
     .stream() 
     .sort(Comparator.comparing(Map.Entry::getValue).reversed()) 
     .map(Map.Entry::getKey) 
     .collect(Collectors.toList());