diff --git a/src/org/redkale/net/http/WebSocketNode.java b/src/org/redkale/net/http/WebSocketNode.java index 3fdacea7f..a50e0fbf4 100644 --- a/src/org/redkale/net/http/WebSocketNode.java +++ b/src/org/redkale/net/http/WebSocketNode.java @@ -130,19 +130,8 @@ public abstract class WebSocketNode { CompletableFuture>> future = null; for (final InetSocketAddress nodeAddress : addrs) { CompletableFuture>> mapFuture = getWebSocketAddresses(nodeAddress, groupid) - .thenCompose((List list) -> { - Map> map = new HashMap<>(); - map.put(nodeAddress, list); - return CompletableFuture.completedFuture(map); - }); - if (future == null) { - future = mapFuture; - } else { - future = future.thenCombine(mapFuture, (a, b) -> { - a.putAll(b); - return a; - }); - } + .thenCompose((List list) -> CompletableFuture.completedFuture(Utility.ofMap(nodeAddress, list))); + future = future == null ? mapFuture : future.thenCombine(mapFuture, (a, b) -> Utility.merge(a, b)); } return future == null ? CompletableFuture.completedFuture(new HashMap<>()) : future; }); @@ -203,11 +192,8 @@ public abstract class WebSocketNode { CompletableFuture future = null; for (InetSocketAddress addr : addrs) { if (addr == null || addr.equals(localSncpAddress)) continue; - if (future == null) { - future = remoteNode.sendMessage(addr, groupid, recent, message, last); - } else { - future = future.thenCombine(remoteNode.sendMessage(addr, groupid, recent, message, last), (a, b) -> a | b); - } + future = future == null ? remoteNode.sendMessage(addr, groupid, recent, message, last) + : future.thenCombine(remoteNode.sendMessage(addr, groupid, recent, message, last), (a, b) -> a | b); } return future == null ? CompletableFuture.completedFuture(0) : future; }); diff --git a/src/org/redkale/util/Utility.java b/src/org/redkale/util/Utility.java index 7f0338853..3b4f11ed2 100644 --- a/src/org/redkale/util/Utility.java +++ b/src/org/redkale/util/Utility.java @@ -108,15 +108,38 @@ public final class Utility { * 将多个key:value对应值组合成一个Map,items长度必须是偶数, 参数个数若是奇数的话,最后一个会被忽略 * 类似 JDK9中的 Map.of 方法 * + * @param 泛型 + * @param 泛型 * @param items 键值对 * * @return Map */ - public static Map ofMap(Object... items) { - HashMap map = new LinkedHashMap<>(); + public static Map ofMap(Object... items) { + HashMap map = new LinkedHashMap<>(); int len = items.length / 2; for (int i = 0; i < len; i++) { - map.put(items[i * 2], items[i * 2 + 1]); + map.put((K) items[i * 2], (V) items[i * 2 + 1]); + } + return map; + } + + /** + * 将多个Map合并成一个Map + * + * @param 泛型 + * @param 泛型 + * @param maps Map + * + * @return Map + */ + public static Map merge(Map... maps) { + Map map = null; + for (Map m : maps) { + if (map == null) { + map = m; + } else if (m != null) { + map.putAll(m); + } } return map; }