diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index f37f2dcdf9..4704c979db 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -122,6 +122,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -1794,11 +1795,11 @@ public class SignalServiceMessageSender { } private GroupTargetInfo buildGroupTargetInfo(List recipients) { - List destinations = new LinkedList<>(); - Map> recipientDevices = recipients.stream().collect(Collectors.toMap(a -> a, a -> new LinkedList<>())); + Set destinations = new LinkedHashSet<>(); + Map> recipientDevices = new HashMap<>(); for (SignalServiceAddress recipient : recipients) { - List devices = recipientDevices.get(recipient); + List devices = recipientDevices.containsKey(recipient) ? recipientDevices.get(recipient) : new LinkedList<>(); destinations.add(new SignalProtocolAddress(recipient.getUuid().get().toString(), SignalServiceAddress.DEFAULT_DEVICE_ID)); devices.add(SignalServiceAddress.DEFAULT_DEVICE_ID); @@ -1809,9 +1810,11 @@ public class SignalServiceMessageSender { devices.add(deviceId); } } + + recipientDevices.put(recipient, devices); } - return new GroupTargetInfo(destinations, recipientDevices); + return new GroupTargetInfo(new ArrayList<>(destinations), recipientDevices); }