[英]How to build a new list containing all entries from existing list AND a copy of each entry with one field modified?
[英]List of entries, how to add a new Entry?
在 Java 中,我正在实现这个:
List<Entry<String, Integer>> listObjects = new ArrayList<Entry<String, Integer>>();
但是如何添加新条目?
因为它不适用于: listObjects.add(new Entry<"abc", 1>());
提前致谢。
我知道这是一个相当古老的线程,但您可以按如下方式进行:
listObjects.add(new java.util.AbstractMap.SimpleEntry<String, Integer>("abc", 1));
它可能会帮助像我这样最近尝试这样做的人!
我希望它有帮助:-)
你的意思是Map.Entry
吗? 那是一个接口(所以你不能在没有实现 class 的情况下实例化,你可以在 Java 教程中了解接口)。 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))
但这在 map 上下文之外并没有真正意义。
Entry
是参数化的class ,您需要使用构造函数创建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);
With Map.Entry
it is somewhat different (OP just mentioned, that Entry
is Map.Entry
in Fact. We can't create Map.Entry
instances, we usually get them from an existing map:
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);
使用现成的Entry
实现的一种方法是Guava 的 Immutable Entry类似这样的listObjects.add(Maps.immutableEntry("abc",1));
也许listObjects.add(new Entry<String, Integer>("abc", 1));
? generics 指定类型( String
, Integer
),而不是值( abc
, 1
)。
编辑- 请注意,后来添加的Entry
实际上是Map.Entry
,因此您需要创建Map.Entry
的实现,稍后实例化,正如所选答案所解释的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.