Sobes.tech
Назад к вопросам
Senior
8

Реализуйте RecommenderService с методами getTop(User user, int limit) и addDocument(Document document), используя in-memory хранилище

Компании, где спрашивали
VKVK

Ответ от нейросети

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` добавляет новый документ в хранилище.