diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 520f87c3d0a..d50f782cee7 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -52,6 +52,7 @@ The type attribute can be add,update,fix,remove. Use accessors in ToStringStyle so subclasses can effectively override them. `LocaleUtils.toLocale(String)` for a 2 letter country code now returns a value instead of throwing an `IllegalArgumentException`. + Add MutablePair.copyOf(Map.Entry). Add SystemProperties.getPath(String, Supplier<Path>). Add JavaVersion.JAVA_25. Add SystemUtils.IS_JAVA_25. diff --git a/src/main/java/org/apache/commons/lang3/tuple/MutablePair.java b/src/main/java/org/apache/commons/lang3/tuple/MutablePair.java index 1940c7a857c..23b1dcf355e 100644 --- a/src/main/java/org/apache/commons/lang3/tuple/MutablePair.java +++ b/src/main/java/org/apache/commons/lang3/tuple/MutablePair.java @@ -72,6 +72,26 @@ public static MutablePair of(final L left, final R right) { return new MutablePair<>(left, right); } + /** + * Creates a mutable pair from an existing pair. + * + *

This factory allows the pair to be created using inference to + * obtain the generic types.

+ * + * @param pair the existing pair. + * @param the left element type. + * @param the right element type. + * @return a pair formed from the two parameters, not null. + * @throws NullPointerException if {@code pair} is null. + * @since 3.20.0 + */ + public static MutablePair copyOf(final Map.Entry pair) { + of(Objects.requireNonNull(pair, "pair")); + final L left = pair.getKey(); + final R right = pair.getValue(); + return new MutablePair<>(left, right); + } + /** * Creates a mutable pair from a map entry. * diff --git a/src/test/java/org/apache/commons/lang3/tuple/MutablePairTest.java b/src/test/java/org/apache/commons/lang3/tuple/MutablePairTest.java index 84157dce75d..f9f1c1cec72 100644 --- a/src/test/java/org/apache/commons/lang3/tuple/MutablePairTest.java +++ b/src/test/java/org/apache/commons/lang3/tuple/MutablePairTest.java @@ -90,6 +90,15 @@ void testEquals() { assertNotEquals(p, new Object()); } + @Test + void testCopyOf() { + assertNullPointerException(() -> MutablePair.copyOf(null)); + final Pair pair = Pair.of(0, "foo"); + final MutablePair mutablePair = MutablePair.copyOf(pair); + assertEquals(pair.getLeft(), mutablePair.getLeft()); + assertEquals(pair.getRight(), mutablePair.getRight()); + } + @Test void testHashCode() { assertEquals(MutablePair.of(null, "foo").hashCode(), MutablePair.of(null, "foo").hashCode());