I have been doing academic research for the past 10 years on various issues related to the usability of the Java API.
I can tell you that the statement that one way to do something in Java is pretty wrong. In Java, there are often many ways to do the same. And, unfortunately, they are often not consistent or documented.
One problem with inflating a class interface using convenient methods is that it becomes harder for you to understand the class and how to use it. The more choices you have, the harder it becomes.
When analyzing some open source libraries, I found instances of redundant functionality added by different people using different terms. Clearly, a bad idea.
The big problem is that the information conveyed by the name no longer makes sense. For example, things like putLayer vs. setLayer in swing, where one only updates the layer and the other also updates (guess which one?) is the problem. Similarly, getComponentAt and findComponentAt. In other ways, the more ways you can do something, the more you mess up the rest and reduce the "entropy" of existing functions.
Here is a good example. Suppose you want Java to replace a substring inside a string with another string. You can use String.replace (CharSequence, CharSequence), which works just as you expected, literal for a literal. Now suppose you wanted to make a regex replacement. You can use the Java Matcher and perform regular expression replacements, and any maintainer understands what you did. However, you can simply write String.replaceAll (String, String), which calls the version of Matcher. However, many of your companions may not be familiar with this and may not be aware of the consequences, including the fact that the replacement string cannot contain "$". Thus, replacing “USD” with “$” signs will work well with replace (), but will lead to crazy things with replacing All ().
Perhaps the biggest problem is that “doing the same thing” is rarely the problem of using the same method. In many places of the Java API (and I'm sure that in other languages) you will find ways to do "almost the same thing", but with differences in performance, synchronization, state changes, exception handling, etc. For example, one call will work directly, and the other will set locks, and the other will change the type of exception, etc. This is the recipe for the problem.
So the bottom line. A few ways to do the same is not a good idea if they are not straightforward and very simple, and you take great care to ensure consistency.