我必须实现以下方法,该方法接受Java Map中的value元素并返回Map中封装键和值对象的pojo集合。
public Set<CacheElement<K, V>> searchByValue(V v);
CacheElement类如下:
public final class CacheElement<K, V> {
private final K k;
private final V v;
public CacheElement(K k, V v) {
super();
this.k = k;
this.v = v;
}
public K getK() {
return k;
}
public V getV() {
return v;
}
}
我编写了以下方法,以在Map中找到与传递的值相对应的键元素集。
public Set<CacheElement<K, V>> searchByValue(V v) {
Set<K> keySet = this.cacheMap.entrySet().stream()
.filter(entry -> entry.getValue().equals(v))
.map(entry -> entry.getKey())
.collect(Collectors.toSet());
return null;
}
我不确定如何编写lambda以便将keySet
传递给Map并返回包含匹配的CacheElement<K,V>
的Set。
我写了以下不完整的Labmda:
Set<CacheElement<K, V>> elements = this.cacheMap.entrySet().stream()
.filter(entry ->keySet.contains(entry.getKey()))
.map(entry -> new CacheElement<K, V>(entry.getKey(), entry.getValue()));
在将新创建的CacheElement对象收集到一个集合中时,我需要帮助。
该代码位于: https://github.com/abnig/ancache
谢谢
编辑1:
cacheMap是
private Map<K, V> cacheMap = new ConcurrentHashMap<K, V>();
当我添加.collect操作数
Set<CacheElement<K, V>> elements = cacheMap.entrySet().stream()
.filter(entry ->keySet.contains(entry.getKey()))
.map(entry -> new CacheElement<K, V>(entry.getKey(), entry.getValue())
.collect(Collectors.toSet()));
然后我得到以下错误:
Type mismatch: cannot convert from Stream<Object> to Set<CacheElement<K,V>> line 92 Java Problem
The method collect(Collectors.toSet()) is undefined for the type CacheElement<K,V> line 95 Java Problem
第92行是:Set<CacheElement<K, V>> elements = cacheMap.entrySet().stream()
第95行是:collect(Collectors.toSet()))
编辑2
答案 0 :(得分:2)
您主要是缺少collect
( toSet )和return
的结果。您还可以确保完成将该逻辑与collect和return as结合起来的完整操作:
public Set<CacheElement<K, V>> searchByValue(V v) {
return this.cacheMap.entrySet().stream() // assuming Map<K, V> cacheMap
.filter(entry -> entry.getValue().equals(v)) // filter entries with same value 'v'
.map(entry -> new CacheElement<>(entry.getKey(), entry.getValue())) // map key and value to CacheElement
.collect(Collectors.toSet()); // collect as a Set
}