From 12b49cdabfdcf17e085741b81f580a7c5003b4b3 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 25 Mar 2021 15:52:07 +0300 Subject: [PATCH] Fixed - addLastIfExists() and addLastIfExists() methods of RDeque don't work. #3519 --- .../src/main/java/org/redisson/RedissonDeque.java | 15 +++++++++------ .../test/java/org/redisson/RedissonDequeTest.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonDeque.java b/redisson/src/main/java/org/redisson/RedissonDeque.java index 2a1b0fd68..15c5dc349 100644 --- a/redisson/src/main/java/org/redisson/RedissonDeque.java +++ b/redisson/src/main/java/org/redisson/RedissonDeque.java @@ -15,10 +15,7 @@ */ package org.redisson; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; +import java.util.*; import org.redisson.api.RDeque; import org.redisson.api.RFuture; @@ -64,12 +61,18 @@ public class RedissonDeque extends RedissonQueue implements RDeque { @Override public RFuture addFirstIfExistsAsync(V... elements) { - return commandExecutor.writeAsync(getName(), codec, RedisCommands.LPUSHX, getName(), encode(elements)); + List args = new ArrayList<>(elements.length + 1); + args.add(getName()); + encode(args, Arrays.asList(elements)); + return commandExecutor.writeAsync(getName(), codec, RedisCommands.LPUSHX, args.toArray()); } @Override public RFuture addLastIfExistsAsync(V... elements) { - return commandExecutor.writeAsync(getName(), codec, RedisCommands.RPUSHX, getName(), encode(elements)); + List args = new ArrayList<>(elements.length + 1); + args.add(getName()); + encode(args, Arrays.asList(elements)); + return commandExecutor.writeAsync(getName(), codec, RedisCommands.RPUSHX, args.toArray()); } @Override diff --git a/redisson/src/test/java/org/redisson/RedissonDequeTest.java b/redisson/src/test/java/org/redisson/RedissonDequeTest.java index 7e1098c8b..04400351e 100644 --- a/redisson/src/test/java/org/redisson/RedissonDequeTest.java +++ b/redisson/src/test/java/org/redisson/RedissonDequeTest.java @@ -13,6 +13,18 @@ import static org.assertj.core.api.Assertions.assertThat; public class RedissonDequeTest extends BaseTest { + @Test + public void testAddIfExists() { + RDeque deque1 = redisson.getDeque("deque1"); + deque1.add(1); + deque1.add(2); + deque1.add(3); + + deque1.addFirstIfExists(4, 5); + + assertThat(deque1).containsExactly(5, 4, 1, 2, 3); + } + @Test public void testMove() { RDeque deque1 = redisson.getDeque("deque1");