Назад к вопросам
VK
Senior
8
Реализуйте RecommenderService с методами getTop(User user, int limit) и addDocument(Document document), используя in-memory хранилище
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
java import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors;
public class RecommenderService { private final Map<String, Document> documents = new ConcurrentHashMap<>(); private final Map<String, Map<String, Integer>> userScores = new ConcurrentHashMap<>();
// Добавляет документ в хранилище
public void addDocument(Document document) {
documents.put(document.getId(), document);
}
// Возвращает топ документов для пользователя по некоторому критерию
public List<Document> getTop(User user, int limit) {
Map<String, Integer> scores = userScores.getOrDefault(user.getId(), Collections.emptyMap());
return scores.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.limit(limit)
.map(entry -> documents.get(entry.getKey()))
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
// Пример метода для обновления оценок пользователя (можно расширить)
public void updateUserScore(User user, String documentId, int score) {
userScores.computeIfAbsent(user.getId(), k -> new ConcurrentHashMap<>())
.put(documentId, score);
}
}
class Document { private final String id; private final String content;
public Document(String id, String content) {
this.id = id;
this.content = content;
}
public String getId() {
return id;
}
public String getContent() {
return content;
}
}
class User { private final String id;
public User(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
В этом примере `RecommenderService` хранит документы и оценки пользователей в памяти. Метод `getTop` возвращает топ документов для пользователя по оценкам. Метод `addDocument` добавляет новый документ в хранилище.