I am not sure this is what you were expecting, but in the BSD world (such as macOS)
-J differ in how they pass the multiple "lines" to the command. Example:
file1 file2 file3
$ find . -type f -print0 | xargs -I % rm %
$ find . -type f -print0 | xargs -J % rm %
rm file1 file2 file3
-I, xargs will run the command for each element passed to it individually. With
-J, xargs will execute the command once and concatenate all the elements and pass them as arguments all together.
Some commands such as
mkdir can take multiple arguments and act on them the same way as if you passed a single argument and ran them multiple times. But some apps may change depending how you pass arguments to them. For instance the
tar. You may create a tar file and then add files to it or you may create a tar file by adding all the files to it in one go.
$ find . -iname "*.txt" -or -iname "*.pdf" -print0 | xargs -0 -J % tar cjvf documents.tar.bz2 %