Parse a formatted string, which may have duplicate keys, into a map
You can not get it much more efficient that this. It could be more readable and there are some code smells.

Remarks:


The input string "zoo=ooz=10" has a map with 1 entry that has "ooz" as value. Is this what you want? Maybe not limit the split and check that it is 2?
"catch (Exception ex)" is considered bad practice. You are basically saying that you do not care about any Exceptions. Also any possible exceptions in all the methods you call. This is never a good idea.
No argument checking. The cases where the argument is null or the empty string you can leave the method early. This improves readability. Now the massive catch also does the argument checking. Having a dedicated piece of code for every thing is easier to read.
You are transforming one iterable (result of payload.split) into another dynamic sized iterable. Usually it is better to then set the initial capacity for the HashMap to prevent rehashes during insertion which is O(n). But in this case the end size does not have to be equal to the input size. It is a border case.


My proposal:

public static Map&lt;String, String&gt; parseStringToMap(String payload) {
  Map&lt;String, String&gt; map = new HashMap&lt;&gt;();

  if (payload == null || payload.isEmpty()) {
    return map;
  }

  for (String part : payload.split("\\|")) {
      String[] subparts = part.split("=");
      if (subparts.length == 2) {
        map.put(subparts[0], subparts[1]);
      }
  }


  return map;
}