How can I add an Map Entry to an ArrayList?
arraylist, dictionary, java
Solution
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;
}
});
Consider the contract of the `compare` method:
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
Problem
I'm creating an ArrayList of Map Entry key-value pairs. This is so I can store lots of individual words (as a key) and save the total number of times they are used (as the value). I need to be able to sort the ArrayList by value so I can order the words by their values. I have 2 problems: - I don't know the syntax to add a map entry to the ArrayList - I'm not sure how to sort the ArrayList Any help much appreciated! ``` 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 - working code Hi, I've added the new code to add map entries to the ArrayList and that is working great. I have also updated my sort code and this is working great too: ``` 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; } } }); } ```