2016-04-05 98 views
0

我有String列表,有很多重複。 我需要合併重複項並計算到另一個列表。 我知道,我可以使用Map,或smt,但然後我需要sort該列表,我不知道,如果我可以排序Map。 是這樣的:dlate合併列表

for (int i = 0; i < word.size(); i++) 
     {     
      if (word.get(i).equals(itself)) 
      { 
       //if word in list, add 1 to counter     
       int index = (int)word_used.get(i)+1; 
       word_used.set(i, index);      
       wordscount++; 
       return 0;      
      } 
else 
{ 
       if(i == word.size() - 1)//No matches 
       { 
        //add to list 
        write_to_voc(s);      
        return 1; 
       } 
      } 
+1

可以使用'TreeMap的'這是按鍵排序的。或者,您可以先對列表進行排序,然後使用「LinkedHashMap」來保留廣告訂單。或者你可以建立地圖,將其中的條目或鍵從列表中提取到列表中並對其進行排序。有很多方法。 – Thomas

+0

還有https://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html。 很多方法... –

回答

0

實例與流:

List<String> list = Arrays.asList("cc", "aaa", "bbb", "aaa", "cc", "cc"); 
Map<String, Integer> map = list.stream().collect(
     Collectors.toMap(Function.identity(), s -> 1, (i, j) -> i + j, TreeMap::new)); 
System.out.println(map); 

輸出:

{aaa=2, bbb=1, cc=3} 
0

下面是一個與Colletions.frequency

List<String> word = new ArrayList<String>(); 
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(); 

for (int i = 0; i < word.size(); i++){ 
    int occcurence = Collections.frequency(word, word.get(i)); 
    if(!sortedMap.containsKey(word.get(i))) 
     sortedMap.put(word.get(i), occcurence); 
} 
System.out.println(sortedMap);