diff --git a/src/main/java/org/redisson/core/RLexSortedSet.java b/src/main/java/org/redisson/core/RLexSortedSet.java index 2a56ca448..67125e0cf 100644 --- a/src/main/java/org/redisson/core/RLexSortedSet.java +++ b/src/main/java/org/redisson/core/RLexSortedSet.java @@ -20,6 +20,24 @@ import java.util.Set; public interface RLexSortedSet extends RLexSortedSetAsync, Set, RExpirable { + String pollFirst(); + + String pollLast(); + + String first(); + + String last(); + + /** + * Returns rank of value, with the scores ordered from high to low. + * + * @param o + * @return rank or null if value does not exist + */ + Integer revRank(String o); + + Collection readAll(); + int removeRangeTail(String fromElement, boolean fromInclusive); /** diff --git a/src/main/java/org/redisson/core/RLexSortedSetAsync.java b/src/main/java/org/redisson/core/RLexSortedSetAsync.java index 6616e25e5..c82f36b23 100644 --- a/src/main/java/org/redisson/core/RLexSortedSetAsync.java +++ b/src/main/java/org/redisson/core/RLexSortedSetAsync.java @@ -21,6 +21,16 @@ import io.netty.util.concurrent.Future; public interface RLexSortedSetAsync extends RCollectionAsync { + Future pollLastAsync(); + + Future pollFirstAsync(); + + Future firstAsync(); + + Future lastAsync(); + + Future> readAllAsync(); + Future removeRangeAsync(String fromElement, boolean fromInclusive, String toElement, boolean toInclusive); /** @@ -126,5 +136,13 @@ public interface RLexSortedSetAsync extends RCollectionAsync { */ @Deprecated Future> valueRangeAsync(int startIndex, int endIndex); + + /** + * Returns rank of value, with the scores ordered from high to low. + * + * @param o + * @return rank or null if value does not exist + */ + Future revRankAsync(String o); } diff --git a/src/test/java/org/redisson/RedissonLexSortedSetTest.java b/src/test/java/org/redisson/RedissonLexSortedSetTest.java index e6ce62d4c..d3d220cb4 100644 --- a/src/test/java/org/redisson/RedissonLexSortedSetTest.java +++ b/src/test/java/org/redisson/RedissonLexSortedSetTest.java @@ -1,12 +1,53 @@ package org.redisson; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; + +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; import org.redisson.core.RLexSortedSet; public class RedissonLexSortedSetTest extends BaseTest { + @Test + public void testPollLast() { + RLexSortedSet set = redisson.getLexSortedSet("simple"); + Assert.assertNull(set.pollLast()); + + set.add("a"); + set.add("b"); + set.add("c"); + + Assert.assertEquals("c", set.pollLast()); + MatcherAssert.assertThat(set, Matchers.contains("a", "b")); + } + + @Test + public void testPollFirst() { + RLexSortedSet set = redisson.getLexSortedSet("simple"); + Assert.assertNull(set.pollFirst()); + + set.add("a"); + set.add("b"); + set.add("c"); + + Assert.assertEquals("a", set.pollFirst()); + MatcherAssert.assertThat(set, Matchers.contains("b", "c")); + } + + @Test + public void testFirstLast() { + RLexSortedSet set = redisson.getLexSortedSet("simple"); + set.add("a"); + set.add("b"); + set.add("c"); + set.add("d"); + + Assert.assertEquals("a", set.first()); + Assert.assertEquals("d", set.last()); + } + @Test public void testRemoveLexRangeTail() { RLexSortedSet set = redisson.getLexSortedSet("simple");