gpt4 book ai didi

java - Collector.toMap 使用泛型

转载 作者:行者123 更新时间:2023-12-01 14:13:56 26 4
gpt4 key购买 nike

我很难在 Java 中使用流 API 来处理泛型映射。我有一张以下列方式扩展 LinkedHashMap 的 map

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使用 toMap 实现用 LRUCache::new 覆盖供应商以下列方式:
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com