When transferring tokens, if there are many source objects, merge them first and then split the result into splitObjects. An error occurred during this step.
Argument splitCoin;
if (sourceObjects.size() > 1) {
Tuple3<ObjectID, SequenceNumber, ObjectDigest> destCoin = transactionBlock.getObjectRef(sourceObjects.get(0));
List<Tuple3<ObjectID, SequenceNumber, ObjectDigest>> sourceCoins = sourceObjects.stream()
.skip(1)
.map(item -> transactionBlock.getObjectRef(item))
.collect(Collectors.toList());
splitCoin = transactionBlock.mergeCoins(destCoin, sourceCoins);
} else {
splitCoin = transactionBlock.getObjectToArg(sourceObjects.get(0));
}
// splitCoins
Argument argument = transactionBlock.splitCoinsNumber(splitCoin, Lists.newArrayList(amount));
SuiAddress.Builder recipientAddressBuilder = new SuiAddress.Builder();
recipientAddressBuilder.value = transactionBlock.geAddressBytes(recipient);
transactionBlock.transferObjects(Lists.newArrayList(argument),
transactionBlock.pure(recipientAddressBuilder.build()));
===== mergeCoins =======
public Argument mergeCoins(
Tuple3<ObjectID, SequenceNumber, ObjectDigest> destCoin,
List<Tuple3<ObjectID, SequenceNumber, ObjectDigest>> sourceCoins) {
ImmOrOwnedObject.Builder objectBuilder = new ImmOrOwnedObject.Builder();
objectBuilder.value = destCoin;
Argument dcoin = obj(objectBuilder.build());
List<Argument> scoins =
sourceCoins.stream()
.map(
objectRef -> {
ImmOrOwnedObject.Builder builder = new ImmOrOwnedObject.Builder();
builder.value = objectRef;
return obj(builder.build());
})
.collect(Collectors.toList());
return mergeCoins(dcoin, scoins);
}

I hope to get some advice.
When transferring tokens, if there are many source objects, merge them first and then split the result into splitObjects. An error occurred during this step.
I hope to get some advice.