This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 5eaed24813 FilteredMap/MapBuilder improvements
5eaed24813 is described below

commit 5eaed24813db54a472c0ddd9a255fc774811ae9a
Author: James Bognar <[email protected]>
AuthorDate: Sun Dec 14 16:35:18 2025 -0500

    FilteredMap/MapBuilder improvements
---
 .../juneau/commons/collections/ListBuilder.java    | 27 ++++++++++
 .../juneau/commons/collections/MapBuilder.java     | 11 ----
 .../juneau/commons/collections/SetBuilder.java     | 27 ++++++++++
 .../commons/collections/ListBuilder_Test.java      | 62 ++++++++++++++++++++++
 .../commons/collections/SetBuilder_Test.java       | 62 ++++++++++++++++++++++
 5 files changed, 178 insertions(+), 11 deletions(-)

diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/ListBuilder.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/ListBuilder.java
index 0de6e3f0ea..a3b3166a57 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/ListBuilder.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/ListBuilder.java
@@ -83,6 +83,11 @@ import org.apache.juneau.commons.utils.*;
  *             .addAll(<jv>existing</jv>)
  *             .add(4, 5, 6)
  *             .build();
+ *
+ *     <jc>// FluentList wrapper - use buildFluent()</jc>
+ *     FluentList&lt;String&gt; <jv>fluent</jv> = 
ListBuilder.<jsm>create</jsm>(String.<jk>class</jk>)
+ *             .add(<js>"one"</js>, <js>"two"</js>)
+ *             .buildFluent();
  * </p>
  *
  * <h5 class='section'>Thread Safety:</h5>
@@ -285,6 +290,28 @@ public class ListBuilder<E> {
                return list;
        }
 
+       /**
+        * Builds the list and wraps it in a {@link FluentList}.
+        *
+        * <p>
+        * This is a convenience method that calls {@link #build()} and wraps 
the result in a {@link FluentList}.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bjava'>
+        *      <jk>import static</jk> 
org.apache.juneau.commons.utils.CollectionUtils.*;
+        *
+        *      FluentList&lt;String&gt; <jv>list</jv> = 
ListBuilder.<jsm>create</jsm>(String.<jk>class</jk>)
+        *              .add(<js>"one"</js>, <js>"two"</js>)
+        *              .buildFluent();
+        * </p>
+        *
+        * @return The built list wrapped in a {@link FluentList}, or {@code 
null} if {@link #sparse()} is set and the list is empty.
+        */
+       public FluentList<E> buildFluent() {
+               List<E> result = build();
+               return result == null ? null : new FluentList<>(result);
+       }
+
        /**
         * Registers value converters that can adapt incoming values in {@link 
#addAny(Object...)}.
         *
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MapBuilder.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MapBuilder.java
index 24b0d095b2..12a3ef1dc4 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MapBuilder.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MapBuilder.java
@@ -434,17 +434,6 @@ public class MapBuilder<K,V> {
                return this;
        }
 
-       /**
-        * Forces the existing set to be copied instead of appended to.
-        *
-        * @return This object.
-        */
-       public MapBuilder<K,V> copy() {
-               if (nn(map))
-                       map = new LinkedHashMap<>(map);
-               return this;
-       }
-
        /**
         * Applies a default filter that excludes common "empty" or "unset" 
values from being added to the map.
         *
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/SetBuilder.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/SetBuilder.java
index 1f77101821..98d135cbd4 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/SetBuilder.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/SetBuilder.java
@@ -90,6 +90,11 @@ import org.apache.juneau.commons.utils.*;
  *     Set&lt;String&gt; <jv>maybeNull</jv> = 
SetBuilder.<jsm>create</jsm>(String.<jk>class</jk>)
  *             .sparse()
  *             .build();  <jc>// Returns null, not empty set</jc>
+ *
+ *     <jc>// FluentSet wrapper - use buildFluent()</jc>
+ *     FluentSet&lt;String&gt; <jv>fluent</jv> = 
SetBuilder.<jsm>create</jsm>(String.<jk>class</jk>)
+ *             .add(<js>"one"</js>, <js>"two"</js>)
+ *             .buildFluent();
  * </p>
  *
  * <h5 class='section'>Thread Safety:</h5>
@@ -288,6 +293,28 @@ public class SetBuilder<E> {
                return set;
        }
 
+       /**
+        * Builds the set and wraps it in a {@link FluentSet}.
+        *
+        * <p>
+        * This is a convenience method that calls {@link #build()} and wraps 
the result in a {@link FluentSet}.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bjava'>
+        *      <jk>import static</jk> 
org.apache.juneau.commons.utils.CollectionUtils.*;
+        *
+        *      FluentSet&lt;String&gt; <jv>set</jv> = 
SetBuilder.<jsm>create</jsm>(String.<jk>class</jk>)
+        *              .add(<js>"one"</js>, <js>"two"</js>)
+        *              .buildFluent();
+        * </p>
+        *
+        * @return The built set wrapped in a {@link FluentSet}, or {@code 
null} if {@link #sparse()} is set and the set is empty.
+        */
+       public FluentSet<E> buildFluent() {
+               Set<E> result = build();
+               return result == null ? null : new FluentSet<>(result);
+       }
+
        /**
         * Registers value converters that can adapt incoming values in {@link 
#addAny(Object...)}.
         *
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/ListBuilder_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/ListBuilder_Test.java
index 65500d9600..9a9e094e6e 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/ListBuilder_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/ListBuilder_Test.java
@@ -628,5 +628,67 @@ class ListBuilder_Test extends TestBase {
                assertNotNull(list);
                assertThrows(UnsupportedOperationException.class, () -> 
list.add("a"));
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // BuildFluent
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Test
+       void n01_buildFluent_returnsFluentList() {
+               var list = ListBuilder.create(String.class)
+                       .add("a", "b", "c")
+                       .buildFluent();
+
+               assertNotNull(list);
+               assertTrue(list instanceof FluentList);
+               assertSize(3, list);
+               assertList(list, "a", "b", "c");
+       }
+
+       @Test
+       void n02_buildFluent_sparseEmpty() {
+               var list = ListBuilder.create(String.class)
+                       .sparse()
+                       .buildFluent();
+
+               assertNull(list);
+       }
+
+       @Test
+       void n03_buildFluent_withSorted() {
+               var list = ListBuilder.create(String.class)
+                       .add("c", "a", "b")
+                       .sorted()
+                       .buildFluent();
+
+               assertNotNull(list);
+               assertTrue(list instanceof FluentList);
+               assertList(list, "a", "b", "c");
+       }
+
+       @Test
+       void n04_buildFluent_withUnmodifiable() {
+               var list = ListBuilder.create(String.class)
+                       .add("a", "b", "c")
+                       .unmodifiable()
+                       .buildFluent();
+
+               assertNotNull(list);
+               assertTrue(list instanceof FluentList);
+               assertSize(3, list);
+               assertThrows(UnsupportedOperationException.class, () -> 
list.add("d"));
+       }
+
+       @Test
+       void n05_buildFluent_fluentMethods() {
+               var list = ListBuilder.create(String.class)
+                       .add("a", "b")
+                       .buildFluent();
+
+               assertNotNull(list);
+               // Test that FluentList methods work
+               list.a("c").aa(l("d", "e"));
+               assertList(list, "a", "b", "c", "d", "e");
+       }
 }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/SetBuilder_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/SetBuilder_Test.java
index 049f0f195d..9719ad8b06 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/SetBuilder_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/SetBuilder_Test.java
@@ -667,4 +667,66 @@ class SetBuilder_Test extends TestBase {
                assertNotNull(set);
                assertThrows(UnsupportedOperationException.class, () -> 
set.add("a"));
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // BuildFluent
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Test
+       void p01_buildFluent_returnsFluentSet() {
+               var set = SetBuilder.create(String.class)
+                       .add("a", "b", "c")
+                       .buildFluent();
+
+               assertNotNull(set);
+               assertTrue(set instanceof FluentSet);
+               assertSize(3, set);
+               assertList(set, "a", "b", "c");
+       }
+
+       @Test
+       void p02_buildFluent_sparseEmpty() {
+               var set = SetBuilder.create(String.class)
+                       .sparse()
+                       .buildFluent();
+
+               assertNull(set);
+       }
+
+       @Test
+       void p03_buildFluent_withSorted() {
+               var set = SetBuilder.create(String.class)
+                       .add("c", "a", "b")
+                       .sorted()
+                       .buildFluent();
+
+               assertNotNull(set);
+               assertTrue(set instanceof FluentSet);
+               assertList(set, "a", "b", "c");
+       }
+
+       @Test
+       void p04_buildFluent_withUnmodifiable() {
+               var set = SetBuilder.create(String.class)
+                       .add("a", "b", "c")
+                       .unmodifiable()
+                       .buildFluent();
+
+               assertNotNull(set);
+               assertTrue(set instanceof FluentSet);
+               assertSize(3, set);
+               assertThrows(UnsupportedOperationException.class, () -> 
set.add("d"));
+       }
+
+       @Test
+       void p05_buildFluent_fluentMethods() {
+               var set = SetBuilder.create(String.class)
+                       .add("a", "b")
+                       .buildFluent();
+
+               assertNotNull(set);
+               // Test that FluentSet methods work
+               set.a("c").aa(l("d", "e"));
+               assertList(set, "a", "b", "c", "d", "e");
+       }
 }
\ No newline at end of file

Reply via email to