У меня есть TreeMap с ключом, являющимся строкой, а значением - парой, тип (Integer, String), и мне нужно, чтобы моя treeMap была упорядочена по ключу пары. Я мало работал с парами, и мне любопытно, как это сделать.
Мне сложно создать компаратор TreeMap для пары. В настоящее время я добавляю пару на карту после моей функции добавления. Нужно ли мне создавать подкласс для самой пары и использовать компаратор внутри подкласса, или я могу просто получить доступ к паре в классе treeMap через компаратор. Это то, к чему я пытаюсь добавить компаратор.
private final TreeMap<String, Pair<Integer, String>> cacheFiles;
public Cache(int size) {
this.cacheFiles = new TreeMap<String, Pair<Integer, String>>();
this.size = size;
this.currSize =0;
}
public void add(String fname, int cost, String contents) {
if (!cacheFiles.containsKey(fname)) {
updateSize(cost);
cacheFiles.put(fname, new Pair<Integer, String>(cost, contents));
}
Мне нужна моя TreeMap, упорядоченная по «стоимости», чтобы при удалении firstEntry или lastEntry она удаляла самую большую или самую маленькую стоимость, поскольку я не могу отслеживать ключ для каждой записи карты, которую, возможно, придется удалить в данной точке.
Это вроде как то, что я пробовал ... Но редактору не нравится, когда я пытаюсь использовать компаратор Pair.
Спасибо за любую помощь!
public Cache(int size) {
this.cacheFiles = new TreeMap<String, Pair<Integer, String>>(new Comparator<Pair>() {
public int compare(Pair<Integer, String> p1, Pair<Integer, String> p2) {
return o1.getKey().compareTo(o2.getKey());
}
});
this.size = size;
this.currSize =0;
}
TreeMap не может быть отсортирован по значениям, потому что это нарушает спецификацию SortedMap. Смотрите в этом вопросе доступные решения stackoverflow.com/questions/2864840
Да, я видел это решение, но оно основано на простом значении, не вложенном в ключ? Я попытался применить это как решение, и у меня все еще возникают проблемы, так как я не могу добраться до ключа, захватив значение, с которым он сравнивает. Я также попытался создать класс KeyValuePair и иметь мою карту <String, KeyValuePair> и создать компаратор на моем ключе в этой паре, но без особого успеха.




Я думаю, вы получаете значение (пара) из карты в компараторе и отсортируете ключи на его основе