Проблема В поле подсчета в Arraylist и сохранить его - PullRequest
2 голосов
/ 03 февраля 2010

хорошо, у меня есть ArrayList с этими значениями

ACU
ACU
ACU
ACU
ACY
ACY
AER
AER
AER
AGC

Мне нужно получить количество элементов каждого Слова, поэтому для

  • АКС получим 4,
  • ACY мы получим 2,
  • AER мы получим 3,
  • AGC получим 1.

Обычно число, которое повторяется в слове, является переменной поэтому в другой раз ACU может быть 1, а ACY может быть 100 ..

Итак, у меня есть класс для хранения значений "whatWord" и "howMany"

public class Word {

private String whatWord;
private int howMany;

public  cVOPlaza(String whatWord, int  howMany){
  this.whatWord = whatWord;
  this.howMany= howMany;     
}

public String getwhatWord() {
  return whatWord;
}

public void setwhatWord(String whatWord) {
   this.whatWord = whatWord;
}

public int gethowMany() {
   return howMany;
 }

public void sethowMany(int howMany) {
   this.howMany = howMany;
 } 
}

Я застрял здесь, потому что я знаю, что часть get (i + 1) в следующем коде вызовет ошибку, вы знаете, значение не существует, но тогда я не знаю, что делать ...

ArrayList<Word> arrayWords = new ArrayList<Word>();
 int cuantos = 0;
     for (int i=0;i<OriginalList.size();i++) {
     String word1  = OriginalList.get(i).getWord();
     String word2 = OriginalList.get(i+1).getWord();
             if (word1.equals(word2)){
                       //this counter is bad here... 
                       //where do i increment it??
         howMany++;
         Word a = new Word(word1,howMany);
         ///....DONT KNOW WHERE TO ADD THE OBJECT 
                        //to the list
                         //arrayWords.add(a)
      }
        }

Предполагается, что после кода я получу

ACU 4,
ACY 2,
AER 3,
AGC 1.

Сначала я попытался сделать попытку HashMap, пожалуйста, помогите мне с этим кодом:

 HashMap table = new HashMap();
    int value=0;
    String key=null;

   //INITIALIZE HASH??? LIKE THIS
    for (int i = 0; i < OriginalList.size; i++) {
        table.put(0,OriginalList.get(i).getWord());      
    }


         String word1=null;
         ArrayList<Word> arrayWords = new ArrayList<Word>();
         //LOOP FOR SEARCHING
         for (int i = 0; i < OriginalList.size(); i++) {
               key = OriginalList.get(i).getWord();
               if (table.containsKey(key)) { 
                       word1 = (String) table.get(key);
                       value++;
               }else {
                      word1 = (String) table.get(key);
                      value=1
               }
             //Add result??
             Word a = new Word(word1,value);
         }

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 03 февраля 2010

Переберите OriginalList и введите слово в HashMap<String, Integer>. Если его нет, начните с количества 1, в противном случае увеличьте его.

2 голосов
/ 04 февраля 2010

Я думаю, что вы ищете ответ для общих коллекций CollectionUtils.getCardinalityMap () .

JavaDoc: возвращает карту, отображающую каждый уникальный элемент в данной коллекции в целое число, представляющее число вхождений этого элемента в коллекцию.

Так, например ....

List<String> words = new ArrayList();
Map counts = CollectionUtils.getCardinalityMap(words);
2 голосов
/ 03 февраля 2010

Это может быть излишним для того, что вы хотите сделать. Вы могли бы проще создать карту, в которой трехбуквенная строка является ключом, а счетчик - значением. Затем просто переберите свой ArrayList:

Map<String, Integer>wordCount = new HashMap<String, int>();
for(String seq : yourWordList){
    // increment the count of the word by first obtaining its count,
    // and then incrementing it. Paranthesis for clarity
    wordCount.put(seq, (wordCount.get(seq)) + 1);
}
1 голос
/ 03 февраля 2010

Почему бы не установить счетчик циклов на 1?

String word1  = OriginalList.get(i-1).getWord();
String word2 = OriginalList.get(i).getWord();

Таким образом, вы никогда не выйдете за пределы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...