Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions src/com/school/faang/hashmap/задача_6/Solution.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,101 @@
package com.school.faang.hashmap.задача_6;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Solution {
public static void main(String[] args) {
List<Tweet> tweets = new ArrayList<>();

tweets.add(new Tweet("@anna", List.of("#java", "#programming")));
tweets.add(new Tweet("@ivan", List.of("#java")));
tweets.add(new Tweet("@anna", List.of("#java")));
tweets.add(new Tweet("@anna", List.of("#java", "#programming","#sql")));
tweets.add(new Tweet("@ivan", List.of("#programming", "java")));
tweets.add(new Tweet("@ivan", List.of("#java", "#programming")));

Tweet tweet = new Tweet();

Map<String, String> topAuthors = tweet.findTopAuthors(tweets);

for (Map.Entry<String, String> entry : topAuthors.entrySet()) {
String hashtag = entry.getKey();
String author = entry.getValue();

System.out.println("Больше постов с хештегом " + hashtag + " написал " + author);
}
}
}

class Tweet {
private String author;
private List<String> hashtags;

public Tweet (String author, List<String> hashtags) {
this.author = author;
this.hashtags = hashtags;
}

public Tweet () {}

private String getAuthor() {
return author;
}

private List<String> getHashtags() {
return hashtags;
}

public Map<String, String> findTopAuthors(List<Tweet> tweets) {
Map<String, String> topAuthors = new HashMap<>();

Map<String, Map<String, Integer>> authorsHashtagCounter = authorsHashtagCounter(tweets);

for (Map.Entry<String, Map<String, Integer>> entry : authorsHashtagCounter.entrySet()) {
String hashtag = entry.getKey();
Map<String, Integer> authorsHashtagsCounter = entry.getValue();

int maxTweet = 0;
String topAuthorName = "";

for (Map.Entry<String, Integer> innerEntry : authorsHashtagsCounter.entrySet()) {

String authorName = innerEntry.getKey();
int tweetCount = innerEntry.getValue();

if (tweetCount > maxTweet) {
maxTweet = tweetCount;
topAuthorName = authorName;
}
}

topAuthors.put(hashtag, topAuthorName);
}

return topAuthors;
}

private Map<String, Map<String, Integer>> authorsHashtagCounter(List<Tweet> tweets) {
Map<String, Map<String, Integer>> hashtagsCounter = new HashMap<>();

for (Tweet tweet : tweets) {
String name = tweet.getAuthor();

for (String hashtag : tweet.getHashtags()) {
Map<String, Integer> hashtagFrequency = hashtagsCounter.get(hashtag);

if (hashtagsCounter.containsKey(hashtag)) {
hashtagFrequency.put(name, hashtagFrequency.getOrDefault(name, 0) + 1);
}else {
hashtagFrequency = new HashMap<>();
hashtagFrequency.put(name, 1);
hashtagsCounter.put(hashtag, hashtagFrequency);
}
}
}

return hashtagsCounter;
}
}