如何将地图条目添加到ArrayList?

时间:2013-12-08 20:31:08

标签: java dictionary arraylist

我正在创建Map Entry键值对的ArrayList。这样我就可以存储大量单个单词(作为键)并保存它们的总次数(作为值)。

我需要能够按值对ArrayList进行排序,以便我可以按其值排序。

我有两个问题:

  1. 我不知道将地图条目添加到ArrayList的语法
  2. 我不确定如何对ArrayList进行排序
  3. 非常感谢任何帮助!

    protected void addKeywords(Status status) {
        // get tweet
        String str = status.getText();
        // split into an array remove punctuation and make lower case
        String[] splited = str.replaceAll("[^a-zA-Z ]", "").toLowerCase()
                .split("\\s+");
        // vars used in loop
        String thisStr;
        int wordTot;
        Entry<String, Integer> newEntry = null;
    
        for (int i = 0; i < splited.length; i++) {
            // get word from array
            thisStr = splited[i].toLowerCase();
            thisStr = "hi";
    
            // if this is the first word to be added
            if (mapList.size() == 0) {
                //this is the syntax that I don't know!
                newEntry.key = theStr;
                newEntry.value = 1;
                mapList.add(newEntry);
            } else {
                boolean alreadyExists = false;
                //iterate through mapList
                for (Entry<String, Integer> entry : mapList) {
                    // already exists
                    if (entry.getKey() == thisStr) {
                        wordTot = entry.getValue();
                        //increment the value
                        wordTot++;
                        entry.setValue(wordTot);
                        break; 
                    } 
    
                }
                //if we have reached here the value must not be in the arraylist so add it
    
                //again - this is the syntax that I don't know!
                newEntry.key = theStr;
                newEntry.value = 1;
                mapList.add(newEntry);
            }
    
        }
    
    }
    

    -EDIT - 工作代码 嗨,我添加了新的代码,将地图条目添加到ArrayList,这很有用。

    我还更新了我的排序代码,这也很有效:

    private void sortMap() {            
        Collections.sort(mapList, new Comparator<Map.Entry<String, Integer>>() {
              @Override
              public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                if (o1.getValue()>o2.getValue()){
                    return 1;
                }else if (o1.getValue()<o2.getValue()){
                    return -1;
                }else{
                    return 0;
                }
              }
            });
    }
    

1 个答案:

答案 0 :(得分:7)

List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>();
list.add(new AbstractMap.SimpleEntry<String, String>("foo", "bar"));

Collections.sort(list, new Comparator<Map.Entry<String, String>>() {
  @Override
  public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
    return 0;
  }
});

考虑compare方法的合同:

  

比较其订单的两个参数。返回一个负整数,   零或正整数,因为第一个参数小于,等于   到,或大于第二个。