You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/09/02 16:00:08 UTC
[isis] 01/02: ISIS-2774: Can: support unique(..) by custom
bi-predicate
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 7cfcd3b593d204a856fb7b3d1900d159a01ba741
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 2 17:49:48 2021 +0200
ISIS-2774: Can<T>: support unique(..) by custom bi-predicate
---
.../main/java/org/apache/isis/commons/collections/Can.java | 11 ++++++++++-
.../org/apache/isis/commons/collections/Can_Empty.java | 7 ++++++-
.../org/apache/isis/commons/collections/Can_Multiple.java | 14 ++++++++++++++
.../org/apache/isis/commons/collections/Can_Singleton.java | 6 ++++++
4 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/Can.java b/commons/src/main/java/org/apache/isis/commons/collections/Can.java
index 3ad6513..fbf6eeb 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/Can.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/Can.java
@@ -30,6 +30,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -38,9 +39,10 @@ import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.springframework.lang.Nullable;
import javax.enterprise.inject.Instance;
+import org.springframework.lang.Nullable;
+
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -397,6 +399,13 @@ extends Iterable<T>, Comparable<Can<T>>, Serializable {
/**
* Returns a {@code Can} with all the elements from this {@code Can}, but
+ * duplicated elements removed, based on given {@code equality} relation.
+ * @return non-null
+ */
+ public Can<T> unique(@NonNull BiPredicate<T, T> equality);
+
+ /**
+ * Returns a {@code Can} with all the elements from this {@code Can}, but
* contained in reversed order.
* @return non-null
*/
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/Can_Empty.java b/commons/src/main/java/org/apache/isis/commons/collections/Can_Empty.java
index 7b1fc6a..6fa3786 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/Can_Empty.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/Can_Empty.java
@@ -27,6 +27,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -106,6 +107,11 @@ final class Can_Empty<T> implements Can<T> {
}
@Override
+ public Can<T> unique(final @NonNull BiPredicate<T, T> equality) {
+ return this;
+ }
+
+ @Override
public Can<T> reverse() {
return this;
}
@@ -245,5 +251,4 @@ final class Can_Empty<T> implements Can<T> {
}
-
}
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/Can_Multiple.java b/commons/src/main/java/org/apache/isis/commons/collections/Can_Multiple.java
index 0be52ab..1c7c7d5 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/Can_Multiple.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/Can_Multiple.java
@@ -29,6 +29,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -39,6 +40,7 @@ import org.springframework.lang.Nullable;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._Objects;
+import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -120,6 +122,18 @@ final class Can_Multiple<T> implements Can<T> {
}
@Override
+ public Can<T> unique(final @NonNull BiPredicate<T, T> equality) {
+ val list = _Lists.<T>newArrayList();
+ elements
+ .forEach(element->{
+ if(!list.stream().anyMatch(x->equality.test(x, element))) {
+ list.add(element);
+ }
+ });
+ return Can.ofCollection(list);
+ }
+
+ @Override
public Iterator<T> iterator() {
return Collections.unmodifiableList(elements).iterator();
}
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/Can_Singleton.java b/commons/src/main/java/org/apache/isis/commons/collections/Can_Singleton.java
index cc6e2b1..667ffb5 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/Can_Singleton.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/Can_Singleton.java
@@ -29,6 +29,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -107,6 +108,11 @@ final class Can_Singleton<T> implements Can<T> {
}
@Override
+ public Can<T> unique(final @NonNull BiPredicate<T, T> equality) {
+ return this;
+ }
+
+ @Override
public Can<T> reverse() {
return this;
}