This is an automated email from the ASF dual-hosted git repository.
garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git
The following commit(s) were added to refs/heads/master by this push:
new e31092fb9 Keep existing sort order in ComparatorChain.setComparator
(#723)
e31092fb9 is described below
commit e31092fb972f0d37b810c8618c47d9833fd1b31f
Author: Naveed Khan <[email protected]>
AuthorDate: Wed Aug 12 14:41:33 2026 +0000
Keep existing sort order in ComparatorChain.setComparator (#723)
the two-arg overload passed reverse=false, resetting a reverse column to
ascending; forward the current ordering bit instead.
---
.../commons/collections4/comparators/ComparatorChain.java | 2 +-
.../collections4/comparators/ComparatorChainTest.java | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git
a/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
b/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
index 3c3a4151c..d06f01882 100644
---
a/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
+++
b/src/main/java/org/apache/commons/collections4/comparators/ComparatorChain.java
@@ -294,7 +294,7 @@ public class ComparatorChain<E> implements Comparator<E>,
Serializable {
* if index < 0 or index >= size()
*/
public void setComparator(final int index, final Comparator<E> comparator)
throws IndexOutOfBoundsException {
- setComparator(index, comparator, false);
+ setComparator(index, comparator, orderingBits.get(index));
}
/**
diff --git
a/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
b/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
index 8020b7c4c..751cee87c 100644
---
a/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
+++
b/src/test/java/org/apache/commons/collections4/comparators/ComparatorChainTest.java
@@ -187,4 +187,18 @@ class ComparatorChainTest extends
AbstractComparatorTest<ComparatorChainTest.Pse
assertEquals(chain.compare(i1, i2), correctValue, "Comparison returns
the right order");
}
+ @Test
+ void testSetComparatorKeepsExistingSortOrder() {
+ // a reverse column must stay reverse after the two-arg setComparator,
+ // which is documented to maintain the existing sort order
+ final ComparatorChain<Integer> reverse = new ComparatorChain<>(new
ComparableComparator<Integer>(), true);
+ reverse.setComparator(0, new ComparableComparator<Integer>());
+ assertTrue(reverse.compare(1, 2) > 0, "reverse column must stay
descending");
+
+ // a forward column must stay forward
+ final ComparatorChain<Integer> forward = new ComparatorChain<>(new
ComparableComparator<Integer>(), false);
+ forward.setComparator(0, new ComparableComparator<Integer>());
+ assertTrue(forward.compare(1, 2) < 0, "forward column must stay
ascending");
+ }
+
}