package moe.chionlab.wechatmomentstat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import moe.chionlab.wechatmomentstat.Model.SnsInfo; import moe.chionlab.wechatmomentstat.Model.UserSnsInfo; /** * Created by chiontang on 3/21/16. */ public class SnsStat { public String currentUserId = ""; public String currentUserName = ""; public ArrayList<SnsInfo> snsList = null; public ArrayList<UserSnsInfo> userSnsList = new ArrayList<UserSnsInfo>(); public ArrayList<UserSnsInfo> momentRank = null; public ArrayList<UserSnsInfo> likeRank = null; public ArrayList<UserSnsInfo> likedRank = null; public ArrayList<UserSnsInfo> sentCommentRank = null; public ArrayList<UserSnsInfo> receivedCommentRank = null; public ArrayList<UserSnsInfo> photoRank = null; public ArrayList<UserSnsInfo> heatRank = null; public ArrayList<UserSnsInfo> coldRank = null; public long earliestTimestamp = 0; public SnsStat(ArrayList<SnsInfo> snsList) { this.snsList = snsList; this.generateUserSnsList(); this.generateRanks(); } protected void generateUserSnsList() { for (int i=0;i<snsList.size();i++) { SnsInfo snsInfo = snsList.get(i); if (snsInfo.isCurrentUser) { this.currentUserId = snsInfo.authorId; if (this.currentUserName.equals("")) this.currentUserName = snsInfo.authorName; } if (earliestTimestamp == 0 || snsInfo.timestamp < earliestTimestamp) { earliestTimestamp = snsInfo.timestamp; } UserSnsInfo userSnsInfo = getUserSnsInfo(snsInfo.authorId); if (userSnsInfo.userName == null) userSnsInfo.userName = snsInfo.authorName; userSnsInfo.snsList.add(snsInfo); userSnsInfo.likedCount += snsInfo.likes.size(); userSnsInfo.receivedCommentCount += snsInfo.comments.size(); userSnsInfo.photoNumbers += snsInfo.mediaList.size(); for (int commentId=0;commentId<snsInfo.comments.size();commentId++) { SnsInfo.Comment comment = snsInfo.comments.get(commentId); UserSnsInfo commentSender = getUserSnsInfo(comment.authorId); commentSender.sentCommentCount++; if (comment.toUserId != null) { UserSnsInfo replyToUser = getUserSnsInfo(comment.toUserId); replyToUser.repliedCommentCount++; } } for (int likeId=0;likeId<snsInfo.likes.size();likeId++) { SnsInfo.Like like = snsInfo.likes.get(likeId); UserSnsInfo liker = getUserSnsInfo(like.userId); liker.likeCount++; } } } protected void generateRanks() { momentRank = new ArrayList<UserSnsInfo>(userSnsList); likeRank = new ArrayList<UserSnsInfo>(userSnsList); likedRank = new ArrayList<UserSnsInfo>(userSnsList); sentCommentRank = new ArrayList<UserSnsInfo>(userSnsList); receivedCommentRank = new ArrayList<UserSnsInfo>(userSnsList); photoRank = new ArrayList<UserSnsInfo>(userSnsList); heatRank = new ArrayList<UserSnsInfo>(userSnsList); coldRank = new ArrayList<UserSnsInfo>(); for (int i=0;i<userSnsList.size();i++) { UserSnsInfo userSnsInfo = userSnsList.get(i); if (userSnsInfo.sentCommentCount > 0) { userSnsInfo.heatRate = ((double)userSnsInfo.repliedCommentCount)/((double)userSnsInfo.sentCommentCount); } if (userSnsInfo.sentCommentCount >= 15) { coldRank.add(userSnsInfo); } } Collections.sort(momentRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.snsList.size() - lhs.snsList.size(); } }); Collections.sort(likeRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.likeCount - lhs.likeCount; } }); Collections.sort(likedRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.likedCount - lhs.likedCount; } }); Collections.sort(sentCommentRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.sentCommentCount - lhs.sentCommentCount; } }); Collections.sort(receivedCommentRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.receivedCommentCount - lhs.receivedCommentCount; } }); Collections.sort(photoRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { return rhs.photoNumbers - lhs.photoNumbers; } }); Collections.sort(heatRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { if (rhs.heatRate - lhs.heatRate > 0) { return 1; } else if (rhs.heatRate - lhs.heatRate < 0) { return -1; } else { return 0; } } }); Collections.sort(coldRank, new Comparator<UserSnsInfo>() { @Override public int compare(UserSnsInfo lhs, UserSnsInfo rhs) { if (lhs.heatRate - rhs.heatRate > 0) { return 1; } else if (lhs.heatRate - rhs.heatRate < 0) { return -1; } else { return 0; } } }); } public UserSnsInfo getUserSnsInfo(String userId) { for (int i=0;i<userSnsList.size();i++) { if (userSnsList.get(i).userId.equals(userId)) { return userSnsList.get(i); } } UserSnsInfo userSnsInfo = new UserSnsInfo(); userSnsInfo.userId = userId; userSnsList.add(userSnsInfo); return userSnsInfo; } }