在Java中,我正在实现这个:
List<Entry<String, Integer>> listObjects = new ArrayList<Entry<String, Integer>>();
但是如何添加新条目?
因为它不适用于:listObjects.add(new Entry<"abc", 1>());
提前感谢。
答案 0 :(得分:11)
我知道这是一个相当老的线程,但你可以这样做:
listObjects.add(new java.util.AbstractMap.SimpleEntry<String, Integer>("abc", 1));
这可能对像我这样的人有帮助,他最近正试图这样做!
我希望它有所帮助: - )
答案 1 :(得分:5)
你的意思是Map.Entry
吗?这是一个接口(所以你不能在没有实现类的情况下实例化,你可以learn about interfaces in the Java Tutorial)。 Entry
个实例通常仅由Map
实施创建,仅通过Map.entrySet()
当然,因为它是一个界面,你可以添加自己的实现,如下所示:
public class MyEntry<K, V> implements Entry<K, V> {
private final K key;
private V value;
public MyEntry(final K key) {
this.key = key;
}
public MyEntry(final K key, final V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
public V setValue(final V value) {
final V oldValue = this.value;
this.value = value;
return oldValue;
}
}
这样你可以做listObjects.add(new MyEntry<String,Integer>("abc", 1))
但在地图背景之外,这并没有多大意义。
答案 2 :(得分:4)
Entry
是参数化类,您需要使用构造函数(典型方式)创建Entry
的实例。
不知道Entry
的实现:这可能已经有效(至少它显示了它通常如何工作):
// create a list
List<Entry<String, Integer>> listObjects =
new ArrayList<Entry<String, Integer>>()
// create an instance of Entry
Entry<String, Integer> entry = new Entry<String, Integer>("abc", 1);
// add the instance of Entry to the list
listObjects.add(entry);
Map.Entry
有点不同(OP刚提到,事实上Entry
是Map.Entry
。我们无法创建Map.Entry
个实例,我们通常会从现有地图:
Map<String, Integer> map = getMapFromSomewhere();
List<Map.Entry<String, Integer>> listObjects =
new ArrayList<Map.Entry<String, Integer>>();
for (Map.Entry<String, Integer> entry:map.entrySet())
listObjects.add(entry);
答案 3 :(得分:2)
使用Entry
的现成实现的一种方法是Guava's Immutable Entry
像这样listObjects.add(Maps.immutableEntry("abc",1));
答案 4 :(得分:0)
也许listObjects.add(new Entry<String, Integer>("abc", 1));
?泛型指定类型(String
,Integer
),而不是值(abc
,1
)。
编辑 - 请注意,后来添加Entry
实际上是Map.Entry
,因此您需要创建Map.Entry
的实现实例化,正如所选答案所解释的那样。