Untitled

 avatarDarin
plain_text
2 months ago
3.6 kB
2
Indexable
Never
Cho đoạn code bên dưới, giải thích thuộc tính Message message; trong class Message dùng để làm gì.
Giải thích mục đích của đoạn code: comment.message = target.message != null ? target.message : target; trong hàm commentTo
 
 
class UserSolution {
    Map<String, User> users = new HashMap<>();
    Map<Integer, Message> messages = new HashMap<>();
    TreeSet<User> topUsers = new TreeSet<>((a, b) -> a.point == b.point ? a.name.compareTo(b.name) : b.point - a.point);
    TreeSet<Message> topMessages = new TreeSet<>((a, b) -> a.total == b.total ? a.id - b.id : b.total - a.total);
 
 
    void init() {
        users.clear();
        messages.clear();
        topUsers.clear();
        topMessages.clear();
    }
 
 
    int writeMessage(char[] mUser, int mID, int mPoint) {
        String name = new String(mUser).trim();
        User user = users.computeIfAbsent(name, k -> new User());
        user.name = name;
 
 
        topUsers.remove(user);
        user.point += mPoint;
        topUsers.add(user);
 
 
        Message message = new Message(user, mID, mPoint);
        messages.put(mID, message);
        topMessages.add(message);
        return user.point;
    }
 
 
    int commentTo(char[] mUser, int mID, int mTarget, int mPoint) {
        writeMessage(mUser, mID, mPoint);
        Message target = messages.get(mTarget);
        Message comment = messages.get(mID);
        comment.message = target.message != null ? target.message : target;
        topMessages.remove(comment);
        target.comments.add(comment);
 
 
        topMessages.remove(comment.message);
        comment.message.total += mPoint;
        topMessages.add(comment.message);
        return comment.message.total;
    }
 
 
    int erase(int mID) {
        Message post = messages.get(mID);
        if (post.message != null) { // comment
            topMessages.remove(post.message);
            remove(post);
            topMessages.add(post.message);
            return post.message.total;
        } else { // message
            topMessages.remove(post);
            remove(post);
            return post.user.point;
        }
    }
 
 
    void remove(Message post) {
        for (Message i : post.comments)
            if (i.isAlive)
                remove(i);
        post.isAlive = false;
        topUsers.remove(post.user);
        post.user.point -= post.point;
        topUsers.add(post.user);
        if (post.message != null) // comment
            post.message.total -= post.point;
    }
 
 
    void getBestMessages(int[] mBestMessageList) {
        int i = 0;
        for (Message message : topMessages) {
            mBestMessageList[i] = message.id;
            if (++i == 5)
                break;
        }
    }
 
 
    void getBestUsers(char[][] mBestUserList) {
        int i = 0;
        for (User user : topUsers) {
            int j;
            for (j = 0; j < user.name.length(); j++)
                mBestUserList[i][j] = user.name.charAt(j);
            mBestUserList[i][j] = '\0';
            if (++i == 5)
                break;
        }
    }
}
 
 
class User {
    String name;
    int point;
}
 
 
class Message {
    User user;
    int id, point, total;
    boolean isAlive = true;
    Message message;
    List<Message> comments = new ArrayList<>();
 
 
    Message(User mUser, int mID, int mPoint) {
        user = mUser;
        id = mID;
        total = point = mPoint;
    }
}