合并列表中的重复项?

时间:2016-04-05 16:43:14

标签: java list collections

我有String的列表,其中有很多重复。 我需要合并重复项并将其计入另一个列表。 我知道,我可以使用Map或smt,但我需要sort该列表,而且我不知道,如果我可以排序Map。  像这样的东西:

 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;
                }
            }

2 个答案:

答案 0 :(得分:0)

使用stream的示例:

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}

答案 1 :(得分: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);