У меня есть сценарий, в котором я хотел бы иметь отсортированную карту с кортежем в качестве ключа:
var scheduledRunnables = new TreeMap<Tuple<Integer, String>, Runnable>(Comparator.comparing(Tuple::getKey));
При добавлении я хочу добавить кортеж:
scheduledRunnables.put(new Tuple<>(order, taskName), task);
Когдасортировка, я хочу, чтобы это было отсортировано по целому порядку, так как это определяет порядок выполнения исполняемых файлов.Я не обязательно знаю значение переменной taskName
.При вызове get
я хочу указать только целое число заказа по той же причине, что и ранее.При звонке put
я хочу принять во внимание всю пару.Итак, что-то вроде этого:
scheduledRunnables.put(new Tuple<>(1, "Some task"), () -> System.out.println("asdf"));
scheduledRunnables.get(1).run(); // Should output 'asdf'
scheduledRunnables.put(new Tuple<>(1, "Some task"), () -> System.out.println("qwerty"));
scheduledRunnables.get(1).run(); // Should output 'qwerty'
scheduledRunnables.remove(1).run(); // Should output 'qwerty' and remove from map
Класс Tuple
- это просто держатель данных, который выглядит следующим образом:
@Data
public class Tuple<K, V> {
private final K key;
private V value;
public Tuple(K key, V value) {
this.key = key;
this.value = value;
}
}
Как это будет реализовано?Возможно ли это сделать без специальной реализации интерфейса SortedMap?Есть ли лучший способ добиться того, чего я добиваюсь?