Single-threaded (non-concurrent) solutions can pass all tests but the last. Your solution will be tested for concurrency by submitting it as a Runnable to an ExecutorService. Your solution must leverage multiple Threads to pass the final test.
Java documentation on parallel streams may provide some help.
As a stretch goal, consider if your implementation will work for characters with diacritics or accents. For example, such solutions should not consider e and ë the same character. An example text for this case is Wilhelmus, the Dutch national anthem.