Я хотел бы создать новый элемент , который так же , Util.Map.Entry
которая будет содержать структуру key
, value
.
Проблема в том, что я не могу создать экземпляр, Map.Entry
потому что это интерфейс.
Кто-нибудь знает, как создать новый объект общего ключа / значения для Map.Entry?
java
dictionary
collections
key-value
Человек-паук
источник
источник
Там же
public static class AbstractMap.SimpleEntry<K,V>
. Не позволяйтеAbstract
части имени вводить вас в заблуждение: это на самом деле НЕabstract
класса (но его верхний уровеньAbstractMap
является).Тот факт, что это
static
вложенный класс, означает, что вы НЕ нужен включающийAbstractMap
экземпляр для его создания, поэтому что-то вроде этого компилируется нормально:Как отмечается в другом ответе, в Guava также есть удобный
static
фабричный метод,Maps.immutableEntry
который вы можете использовать.Ты сказал:
Это не совсем точно. Причина, по которой вы не можете создать экземпляр непосредственно (то есть с помощью
new
), заключается в том, что этоinterface Map.Entry
.Будьте осторожны
Как отмечено в документации,
AbstractMap.SimpleEntry
это@since 1.6
, поэтому, если вы застряли на 5.0, то он вам недоступен.Чтобы найти другой известный класс
implements Map.Entry
, вы можете перейти непосредственно к Javadoc. С версии Java 6К сожалению, версия 1.5 не содержит ни одного известного класса реализации, который вы можете использовать, так что вы, возможно, застряли в реализации своего собственного.
источник
AbstractMap.SimpleEntry
не было общедоступным до Java 6, как вы можете видеть в документации.AbstractMap.SimpleEntry
. Я думаю, вы узнаете что-то новое каждый день!Начиная с Java 9, появился новый служебный метод, позволяющий создавать неизменяемую запись, которая
Map#entry(Object, Object)
.Вот простой пример:
Поскольку это является неизменным, вызов
setValue
вызоветUnsupportedOperationException
. Другими ограничениями является тот факт, что он не сериализуем и,null
поскольку ключ или значение запрещены, если он неприемлем для вас, вам придется использовать егоAbstractMap.SimpleImmutableEntry
илиAbstractMap.SimpleEntry
вместо него.NB. Если вам нужно напрямую создать
Map
пары от 0 до 10 (ключ, значение), вы можете вместо этого использовать методы типаMap.of(K key1, V value1, ...)
.источник
Попробуйте Maps.immutableEntry из гуавы
Это имеет преимущество совместимости с Java 5 (в отличие от
AbstractMap.SimpleEntry
которого требуется Java 6.)источник
Пример AbstractMap.SimpleEntry:
Instantiate:
Добавить строки:
Выбрать строки:
Следует напечатать:
Это хорошо для определения ребер графовых структур. Как между нейронами в твоей голове.
источник
Вы могли бы на самом деле пойти с:
Map.Entry<String, String> en= Maps.immutableEntry(key, value);
источник
Зачем
Map.Entry
? Я думаю, что-то вроде пары ключ-значение подходит для этого случая.Используйте
java.util.AbstractMap.SimpleImmutableEntry
илиjava.util.AbstractMap.SimpleEntry
источник
org.apache.commons.lang3.tuple.Pair
инвентарьjava.util.Map.Entry
и может также использоваться автономно.Также, как другие упоминали, Гуава
com.google.common.collect.Maps.immutableEntry(K, V)
делает свое дело.Я предпочитаю
Pair
за его свободныйPair.of(L, R)
синтаксис.источник
ImmutablePair
вместо этого?Я определил общий класс Pair, который я использую все время. Здорово. В качестве бонуса, определяя статический метод фабрики (Pair.create), мне нужно писать аргументы типа только вдвое реже.
источник
Pair
реализации - это плохо. ИсточникЕсли вы используете Clojure, у вас есть другая опция:
источник