DEV Community

Cover image for Solution: The verse with the maximum number of appearances
pazvanti
pazvanti

Posted on • Edited on

Solution: The verse with the maximum number of appearances

Problem: Given a poem, with each verse on a new line, Find the verse (or verses) that have the maximum number of appearances and how many times it appears in the text.

Play Framework Java Course

Solution:

public static List<Pair> max2(String fullText) throws Exception {
        // If there is no text provided, throw an exception
        if (fullText == null || fullText.isBlank()) throw new Exception("No text provided");

        // We split it by line separator so that we get all the verses. We also do a 'toLowerCase' so that
        // we analyze it case-insensitive
        String[] split = fullText.toLowerCase(Locale.ROOT).split("\n");

        // Create a List from the verses (so that we can use Streams
        // And a HashSet, so that we have each verse only once
        List<String> verses = Arrays.asList(split);
        Set<String> uniqueVerses = new HashSet<>(verses);

        // Now, let's process it
        return uniqueVerses.stream()
                // We map each line to a Pair that has the line and the frequency it appears in the text
                .map(line -> new Pair(line, Collections.frequency(verses, line)))

                // We collect it and group them by the number of appearances, now, we will have groups (Map) with the
                // Number of appearances as the key and the list of verses as the value
                .collect(Collectors.groupingBy(p -> p.getValue()))

                // We make the result a Stream so that we can find the MAX
                .entrySet().stream()

                // Get the group that has the maximum number of appearances
                .max(Comparator.comparingInt(p -> p.getKey().intValue()))

                // Retrieve the result and get the List. It will be a List of Pair<String, Integer>,
                // where the Key is the verse and the value is the number of appearances
                .get().getValue();
    }
Enter fullscreen mode Exit fullscreen mode

Conclusions:
Using the power of streams, we can easily manipulate our data set to do groupings, counting, and finding the maximum. No need for complex for-loops or external libraries.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay