2020
2121import javax .json .bind .Jsonb ;
2222import javax .json .bind .JsonbBuilder ;
23+ import java .util .ArrayList ;
2324import java .util .Collection ;
2425import java .util .HashMap ;
2526import java .util .Map ;
2627import java .util .Objects ;
2728import java .util .Set ;
2829
29- import static java .util .stream .Collectors .toList ;
3030import static java .util .stream .Collectors .toSet ;
3131
3232
@@ -54,7 +54,7 @@ class CouchbaseMap<K, V> implements Map<K, V> {
5454 this .bucketName = bucketName + ":map" ;
5555 this .valueClass = valueClass ;
5656 this .keyClass = keyClass ;
57- map = new com .couchbase .client .java .datastructures .collections .CouchbaseMap <JsonObject >(this .bucketName , bucket );
57+ map = new com .couchbase .client .java .datastructures .collections .CouchbaseMap <>(this .bucketName , bucket );
5858 }
5959
6060 @ Override
@@ -120,7 +120,7 @@ public boolean containsKey(Object key) {
120120 @ Override
121121 public boolean containsValue (Object value ) {
122122 Objects .requireNonNull (value , "key is required" );
123- return map . containsValue ( JSONB . toJson (value ) );
123+ return values (). stream (). anyMatch (value :: equals );
124124 }
125125
126126 @ Override
@@ -132,9 +132,17 @@ public Set<K> keySet() {
132132
133133 @ Override
134134 public Collection <V > values () {
135- return map .values ().stream ()
136- .map (s -> JSONB .fromJson (s .toString (), valueClass ))
137- .collect (toList ());
135+
136+ Collection <V > values = new ArrayList <>();
137+
138+ for (Object object : map .values ()) {
139+ if (object instanceof Map ) {
140+ values .add (JSONB .fromJson (JsonObject .from (Map .class .cast (object )).toString (), valueClass ));
141+ } else if (object instanceof JsonObject ) {
142+ values .add (JSONB .fromJson (JsonObject .class .cast (object ).toString (), valueClass ));
143+ }
144+ }
145+ return values ;
138146 }
139147
140148 @ Override
0 commit comments