2016-04-05 4 views
0

У меня есть список 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; 
       } 
      } 
+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); 
Смежные вопросы