Мне необходимо реализовать следующий метод, который принимает элемент значения в карте Java и возвращает набор инкапсулирующих в ключ объектов и значений в карте 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;
}
}
Я написал следующий метод для поиска набора ключевых элементов на карте, соответствующих переданному значению.
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;
}
Я не уверен, как написать лямбду, чтобы передать keySet
на карту и вернуть набор, содержащий совпадающие CacheElement<K,V>
.
Я написал следующую неполную лабмду:
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 в наборе.
Код доступенat: https://github.com/abnig/ancache
Спасибо
Edit-1:
Кэш-карта
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