diff --git a/src/main/java/io/github/avegera/predicate4j/api/WhereList.java b/src/main/java/io/github/avegera/predicate4j/api/WhereList.java index 6efeac1..9690717 100644 --- a/src/main/java/io/github/avegera/predicate4j/api/WhereList.java +++ b/src/main/java/io/github/avegera/predicate4j/api/WhereList.java @@ -8,11 +8,9 @@ public interface WhereList extends WhereObject> { RichPredicate notEmpty(); - RichPredicate hasSize(int size); - - RichPredicate notHaveSize(int size); - RichPredicate contains(R element); RichPredicate notContains(R element); + + WhereNumber size(); } \ No newline at end of file diff --git a/src/main/java/io/github/avegera/predicate4j/impl/WhereListImpl.java b/src/main/java/io/github/avegera/predicate4j/impl/WhereListImpl.java index 78b73fd..cfd2597 100644 --- a/src/main/java/io/github/avegera/predicate4j/impl/WhereListImpl.java +++ b/src/main/java/io/github/avegera/predicate4j/impl/WhereListImpl.java @@ -3,6 +3,7 @@ import io.github.avegera.predicate4j.Predicates; import io.github.avegera.predicate4j.api.RichPredicate; import io.github.avegera.predicate4j.api.WhereList; +import io.github.avegera.predicate4j.api.WhereNumber; import java.util.List; import java.util.function.Function; @@ -28,22 +29,21 @@ public RichPredicate notEmpty() { } @Override - public RichPredicate hasSize(int size) { - return getPredicate(Predicates.hasSize(size)); + public RichPredicate contains(R element) { + return getPredicate(Predicates.containsElement(element)); } @Override - public RichPredicate notHaveSize(int size) { - return getPredicate(Predicates.notHaveSize(size)); + public RichPredicate notContains(R element) { + return getPredicate(Predicates.notContainsElement(element)); } @Override - public RichPredicate contains(R element) { - return getPredicate(Predicates.containsElement(element)); + public WhereNumber size() { + return new WhereNumberImpl<>(this::getSize, previousPredicate); } - @Override - public RichPredicate notContains(R element) { - return getPredicate(Predicates.notContainsElement(element)); + private Integer getSize(T object) { + return getInt(object, List::size); } } \ No newline at end of file diff --git a/src/main/java/io/github/avegera/predicate4j/impl/WhereObjectImpl.java b/src/main/java/io/github/avegera/predicate4j/impl/WhereObjectImpl.java index 611312e..5a8c5d6 100644 --- a/src/main/java/io/github/avegera/predicate4j/impl/WhereObjectImpl.java +++ b/src/main/java/io/github/avegera/predicate4j/impl/WhereObjectImpl.java @@ -73,6 +73,14 @@ protected RichPredicate getPredicate(Predicate predicate) { return new RichPredicateImpl<>(previousPredicate.and(currentPredicate)); } + protected Integer getInt(T object, Function intFunction) { + if (mapper == null) { + return null; + } + R result = mapper.apply(object); + return result != null ? intFunction.apply(result) : 0; + } + private Predicate getPredicateWithMapper(Function mapper, Predicate predicate) { return object -> object != null && predicate != null && predicate.test(mapper.apply(object)); } diff --git a/src/main/java/io/github/avegera/predicate4j/impl/WhereStringImpl.java b/src/main/java/io/github/avegera/predicate4j/impl/WhereStringImpl.java index 7a8f3e6..2fbcf07 100644 --- a/src/main/java/io/github/avegera/predicate4j/impl/WhereStringImpl.java +++ b/src/main/java/io/github/avegera/predicate4j/impl/WhereStringImpl.java @@ -73,10 +73,6 @@ public WhereNumber length() { } private Integer getLength(T object) { - if (mapper == null) { - return null; - } - String string = mapper.apply(object); - return string != null ? string.length() : 0; + return getInt(object, String::length); } } \ No newline at end of file diff --git a/src/test/java/io/github/avegera/predicate4j/WhereTest.java b/src/test/java/io/github/avegera/predicate4j/WhereTest.java index 0cc1f26..38208a9 100644 --- a/src/test/java/io/github/avegera/predicate4j/WhereTest.java +++ b/src/test/java/io/github/avegera/predicate4j/WhereTest.java @@ -1218,8 +1218,8 @@ void mappedListIsEmpty() { } @Nested - @DisplayName(".hasSize(size)") - class HasSize { + @DisplayName(".size().isEqualTo(size)") + class SizeIsEqualTo { @Nested @DisplayName("returns true when") @@ -1228,21 +1228,21 @@ class ReturnsTrueWhen { @Test @DisplayName("mapped list has the specified size") void mappedListHasSpecifiedSize() { - Predicate predicate = where().list(Customer::roles).hasSize(2); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(2); assertThat(predicate).accepts(new Customer(asList("Admin", "User"), null)); } @Test @DisplayName("mapped list is empty and specified size is zero") void mappedListIsEmptyAndSpecifiedSizeIsZero() { - Predicate predicate = where().list(Customer::roles).hasSize(0); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(0); assertThat(predicate).accepts(new Customer(new ArrayList<>(), null)); } @Test @DisplayName("mapped list is null and specified size is zero") void mappedListIsNullAndSpecifiedSizeIsZero() { - Predicate predicate = where().list(Customer::roles).hasSize(0); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(0); assertThat(predicate).accepts(new Customer(new ArrayList<>(), null)); } } @@ -1254,29 +1254,29 @@ class ReturnsFalseWhen { @Test @DisplayName("mapped list has a different size than specified") void mappedListHasDifferentSize() { - Predicate predicate = where().list(Customer::roles).hasSize(3); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(3); assertThat(predicate).rejects(new Customer(asList("Admin", "User"), null)); } @Test @DisplayName("mapped list is empty and size is not zero") void mappedListIsEmptyAndSizeIsNotZero() { - Predicate predicate = where().list(Customer::roles).hasSize(1); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(1); assertThat(predicate).rejects(new Customer(new ArrayList<>(), null)); } @Test @DisplayName("mapped list is null and size is not zero") void mappedListIsNullAndSizeIsNotZero() { - Predicate predicate = where().list(Customer::roles).hasSize(2); + Predicate predicate = where().list(Customer::roles).size().isEqualTo(2); assertThat(predicate).rejects(new Customer(null, null)); } } } @Nested - @DisplayName(".notHaveSize(size)") - class NotHaveSize { + @DisplayName(".size().notEqualTo(size)") + class SizeNotEqualTo { @Nested @DisplayName("returns true when") @@ -1285,21 +1285,21 @@ class ReturnsTrueWhen { @Test @DisplayName("mapped list does not have the specified size") void mappedListDoesNotHaveSpecifiedSize() { - Predicate predicate = where().list(Customer::roles).notHaveSize(3); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(3); assertThat(predicate).accepts(new Customer(asList("Admin", "User"), null)); } @Test @DisplayName("mapped list is null and specified size is not zero") void mappedListIsNullAndSpecifiedSizeIsNotZero() { - Predicate predicate = where().list(Customer::roles).notHaveSize(2); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(2); assertThat(predicate).accepts(new Customer(null, null)); } @Test @DisplayName("mapped list is empty and size is not zero") void mappedListIsEmptyAndSizeIsNotZero() { - Predicate predicate = where().list(Customer::roles).notHaveSize(1); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(1); assertThat(predicate).accepts(new Customer(new ArrayList<>(), null)); } } @@ -1311,21 +1311,21 @@ class ReturnsFalseWhen { @Test @DisplayName("mapped list has the specified size") void mappedListHasSpecifiedSize() { - Predicate predicate = where().list(Customer::roles).notHaveSize(2); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(2); assertThat(predicate).rejects(new Customer(asList("Admin", "User"), null)); } @Test @DisplayName("mapped list is empty and specified size is zero") void mappedListIsEmptyAndSpecifiedSizeIsZero() { - Predicate predicate = where().list(Customer::roles).notHaveSize(0); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(0); assertThat(predicate).rejects(new Customer(new ArrayList<>(), null)); } @Test @DisplayName("mapped list is null and specified size is zero") void mappedListIsNullAndSpecifiedSizeIsZero() { - Predicate predicate = where().list(Customer::roles).notHaveSize(0); + Predicate predicate = where().list(Customer::roles).size().notEqualTo(0); assertThat(predicate).rejects(new Customer(new ArrayList<>(), null)); } }