我很难在 Java 中使用流 API 来实现泛型映射。我有一个 map ,它通过以下方式扩展 LinkedHashMap
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private int size;
public LRUCache(int size) {
super(size);
this.size = size;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > size;
}
public LRUCache<K, V> collect() {
return entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)
);
}
}
我正在尝试一个虚拟方法collect
,它实际上会在entrySet上进行流式传输,对其应用一些过滤器,然后返回一个新的LRUCache,但是Collectors.toMap
保留抛出一个错误,上面写着
“不能从静态上下文引用非静态方法”
我知道这是 Collectors.toMap 泛型定义的一些问题。但是,我无法找出正确的泛型来消除错误并实现流和收集功能
最佳答案
LinkedHashMap
在其实现中包含一个无参构造函数,充当toMap
收集操作的提供者。您也可以通过包含以下内容来引入相同的内容:
public LRUCache() {
this(10); // default size
}
此后,您可以按以下方式使用 LRUCache::new
供应商的 toMap
覆盖来收集 LRUCache
实现:
public LRUCache<K, V> collect() {
return entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> a, LRUCache::new));
}
注意:- 重要的是提供一个供应商来收集与 HashMap
不同的实现,这是使用 的其他重载实现所得到的。 toMap
.
关于java - 使用泛型的 Collector.toMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159257/