From 38a30dcf4c5447a3dc17d3925f6892cf871ee54f Mon Sep 17 00:00:00 2001 From: Seung Won Date: Mon, 6 Jan 2025 20:29:55 +0900 Subject: [PATCH] refactor mget method improved readability and efficiency (#3061) * refactor mget method improved readability and efficiency * refactor mget method improved readability and efficiency --- ...isAdvancedClusterReactiveCommandsImpl.java | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/lettuce/core/cluster/RedisAdvancedClusterReactiveCommandsImpl.java b/src/main/java/io/lettuce/core/cluster/RedisAdvancedClusterReactiveCommandsImpl.java index 0fa184b37..e12a352c4 100644 --- a/src/main/java/io/lettuce/core/cluster/RedisAdvancedClusterReactiveCommandsImpl.java +++ b/src/main/java/io/lettuce/core/cluster/RedisAdvancedClusterReactiveCommandsImpl.java @@ -284,7 +284,6 @@ public Flux> mget(K... keys) { @SuppressWarnings({ "unchecked", "rawtypes" }) public Flux> mget(Iterable keys) { - List keyList = LettuceLists.newList(keys); Map> partitioned = SlotHash.partition(codec, keyList); @@ -292,37 +291,25 @@ public Flux> mget(Iterable keys) { return super.mget(keyList); } - List>> publishers = new ArrayList<>(); - - for (Map.Entry> entry : partitioned.entrySet()) { - publishers.add(super.mget(entry.getValue())); - } - - Flux> fluxes = Flux.mergeSequential(publishers); + List>> publishers = partitioned.values().stream().map(super::mget) + .collect(Collectors.toList()); - Mono>> map = fluxes.collectList().map(vs -> { - - KeyValue[] values = new KeyValue[vs.size()]; + return Flux.mergeSequential(publishers).collectList().map(results -> { + KeyValue[] values = new KeyValue[keyList.size()]; int offset = 0; - for (Map.Entry> entry : partitioned.entrySet()) { + for (List partitionKeys : partitioned.values()) { for (int i = 0; i < keyList.size(); i++) { - - int index = entry.getValue().indexOf(keyList.get(i)); - if (index == -1) { - continue; + int index = partitionKeys.indexOf(keyList.get(i)); + if (index != -1) { + values[i] = results.get(offset + index); } - - values[i] = vs.get(offset + index); } - - offset += entry.getValue().size(); + offset += partitionKeys.size(); } return Arrays.asList(values); - }); - - return map.flatMapIterable(keyValues -> keyValues); + }).flatMapMany(Flux::fromIterable); } @Override