Для данной песни напишите алгоритм, который отображает текст с наибольшим количеством повторений, то есть с наиболее частыми текстами. Если несколько слов имеют одинаковое количество повторений, то алгоритм будет отображать только слово с наибольшим количеством символов.
Например, в следующей песне:
"Hate me today",
"Hate me tomorrow",
"Hate me for all the things I didn't do for you",
"Hate me in ways",
"Yeah, ways hard to swallow",
"Hate me so you can finally see what's good for you",
"Hate me today",
"Hate me tomorrow",
"Hate me for all the things I didn't do for you",
"Hate me in ways",
"Yeah, ways hard to swallow",
"Hate me so you can finally see what's good for you",
"Hate me today",
"Hate me tomorrow",
"Hate me for all the things I didn't do for you",
"Hate me in ways",
"Yeah, ways hard to swallow",
"Hate me so you can finally see what's good for you",
"For you",
"For you",
"For you"
I Я попробовал что-то, и это возвращает мне самое повторенное слово. Но проблема в том, как получить слово, которое имеет наибольшее количество символов.
Это мой код:
public class Main {
/* The name of the class has to be Main. */
public static void main(String[] args) {
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]))){
List<String> lyrics = new LinkedList<>();
while(bufferedReader.ready()) {
lyrics.add(bufferedReader.readLine());
}
/* YOUR CODE HERE */
String mostRepeatedWord
= lyrics.stream()
.map(word -> word.toUpperCase())
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.filter(x -> x.getKey().length() > 0)
.max(Comparator.comparing(Entry::getValue))
.get()
.getKey();
System.out.println(mostRepeatedWord);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Без JAVA 8 это решение работает отлично, но я хочу его с JAVA 8
public class Main {
/* The name of the class has to be Main. */
public static void main(String[] args) {
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]))){
List<String> lyrics = new LinkedList<>();
while(bufferedReader.ready()) {
lyrics.add(bufferedReader.readLine());
}
Map<String, Integer> stringsCount = new HashMap<String, Integer>();
for(String string: lyrics)
{
if (string.length() > 0) {
string = string.replace(",","!");
Integer count = stringsCount.get(string);
if(count == null) count = new Integer(0);
count++;
stringsCount.put(string,count);
}
}
Map.Entry<String,Integer> mostRepeated = null;
for(Map.Entry<String, Integer> e: stringsCount.entrySet())
{
if(mostRepeated == null || mostRepeated.getValue()<e.getValue())
mostRepeated = e;
}
String result = mostRepeated.getKey().replace("!",",");
System.out.println(result.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Спасибо за помощь !!!