You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2022/12/11 16:38:52 UTC

[sis] 03/03: Replace some `Collections` method calls by their `Map`, `Set` or `List` equivalent. The latter are immutable and check for null value.

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

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 922983279cd61ee31bde1417b55cccba655083ae
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Sun Dec 11 17:37:48 2022 +0100

    Replace some `Collections` method calls by their `Map`, `Set` or `List` equivalent.
    The latter are immutable and check for null value.
---
 .../apache/sis/internal/gui/GUIUtilitiesTest.java  |  7 +-
 .../apache/sis/internal/book/CodeColorizer.java    |  7 +-
 .../org/apache/sis/filter/ComparisonFilter.java    |  3 +-
 .../org/apache/sis/filter/ConvertFunction.java     |  4 +-
 .../java/org/apache/sis/filter/PropertyValue.java  |  4 +-
 .../coverage/grid/BufferedGridCoverageTest.java    |  2 +-
 .../org/apache/sis/feature/FeatureFormatTest.java  |  4 +-
 .../apache/sis/feature/FeatureOperationsTest.java  |  4 +-
 .../org/apache/sis/feature/FeatureTestCase.java    |  6 +-
 .../feature/builder/AttributeTypeBuilderTest.java  |  4 +-
 .../org/apache/sis/filter/LogicalFilterTest.java   |  4 +-
 .../sis/internal/coverage/j2d/ColorizerTest.java   |  4 +-
 .../sis/internal/feature/GeometriesTestCase.java   |  8 +-
 .../sis/internal/filter/FunctionNamesTest.java     |  3 +-
 .../internal/filter/sqlmm/RegistryTestCase.java    |  6 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |  4 +-
 .../sis/internal/jaxb/cat/EnumMarshallingTest.java |  4 +-
 .../metadata/ImplementationHelperTest.java         |  5 +-
 .../apache/sis/internal/metadata/MergerTest.java   | 11 +--
 .../java/org/apache/sis/metadata/HashCodeTest.java |  8 +-
 .../apache/sis/metadata/InformationMapTest.java    |  6 +-
 .../apache/sis/metadata/PropertyAccessorTest.java  | 11 ++-
 .../apache/sis/metadata/TreeNodeChildrenTest.java  |  4 +-
 .../apache/sis/metadata/TreeTableFormatTest.java   | 11 ++-
 .../java/org/apache/sis/metadata/ValueMapTest.java | 70 ++++++++--------
 .../sis/metadata/iso/CustomMetadataTest.java       |  4 +-
 .../apache/sis/metadata/iso/MarshallingTest.java   | 33 ++++----
 .../sis/metadata/iso/citation/CitationsTest.java   |  3 +-
 .../metadata/iso/citation/DefaultCitationTest.java | 10 +--
 .../metadata/iso/citation/DefaultContactTest.java  |  8 +-
 .../iso/citation/DefaultResponsibilityTest.java    |  4 +-
 .../constraint/DefaultLegalConstraintsTest.java    |  4 +-
 .../sis/metadata/iso/extent/DefaultExtentTest.java |  4 +-
 .../metadata/iso/quality/AbstractElementTest.java  |  4 +-
 .../iso/quality/DefaultDomainConsistencyTest.java  |  7 +-
 .../sis/metadata/sql/MetadataFallbackVerifier.java |  4 +-
 .../sis/metadata/sql/MetadataWriterTest.java       |  4 +-
 .../org/apache/sis/test/mock/MetadataMock.java     |  3 +-
 .../org/apache/sis/test/xml/PackageVerifier.java   | 49 +++++-------
 .../apache/sis/util/iso/DefaultScopedNameTest.java |  7 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |  3 +-
 .../org/apache/sis/xml/RenameListGenerator.java    |  9 +--
 .../apache/sis/xml/TransformingNamespacesTest.java |  9 +--
 .../org/apache/sis/xml/XLinkMarshallingTest.java   |  6 +-
 .../apache/sis/internal/map/ListChangeEvent.java   |  9 +--
 .../apache/sis/internal/map/SEPortrayerTest.java   |  7 +-
 .../MultiResolutionCoverageLoaderTest.java         |  8 +-
 .../referencing/gazetteer/GazetteerFactory.java    |  4 +-
 .../referencing/PositionalAccuracyConstant.java    |  4 +-
 .../factory/CommonAuthorityFactory.java            |  4 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |  2 +-
 .../sis/referencing/factory/sql/EPSGFactory.java   |  2 +-
 .../sis/internal/jaxb/referencing/CodeTest.java    |  6 +-
 .../org/apache/sis/io/wkt/WKTDictionaryTest.java   | 12 +--
 .../referencing/AbstractIdentifiedObjectTest.java  |  4 +-
 .../sis/referencing/EPSGFactoryFallbackTest.java   | 24 +++---
 .../factory/CommonAuthorityFactoryTest.java        | 18 ++---
 .../factory/MultiAuthoritiesFactoryTest.java       | 30 ++++---
 .../operation/CoordinateOperationFinderTest.java   |  8 +-
 .../transform/MathTransformFactoryMock.java        |  3 +-
 .../transform/OperationMethodSetTest.java          | 10 +--
 .../report/CoordinateReferenceSystems.java         |  9 +--
 .../sis/test/integration/ConsistencyTest.java      |  7 +-
 .../apache/sis/test/integration/MetadataTest.java  | 92 +++++++++++-----------
 .../apache/sis/internal/util/AbstractMapTest.java  |  3 +-
 .../sis/internal/util/CheckedArrayListTest.java    |  6 +-
 .../sis/internal/util/CollectionsExtTest.java      |  9 +--
 .../org/apache/sis/measure/SystemUnitTest.java     |  6 +-
 .../org/apache/sis/measure/UnitServicesTest.java   |  4 +-
 .../org/apache/sis/util/collection/CacheTest.java  | 10 +--
 .../sis/util/collection/CodeListSetTest.java       |  2 +-
 .../apache/sis/util/collection/DerivedSetTest.java | 10 +--
 .../util/collection/FrequencySortedSetTest.java    |  3 +-
 .../sis/util/collection/IntegerListTest.java       |  5 +-
 .../apache/sis/internal/storage/csv/StoreTest.java | 25 +++---
 .../sis/internal/storage/folder/StoreTest.java     |  6 +-
 .../aggregate/ConcatenatedFeatureSetTest.java      | 17 ++--
 .../sis/storage/aggregate/JoinFeatureSetTest.java  |  6 +-
 .../apache/sis/internal/storage/gpx/Copyright.java |  4 +-
 .../sis/internal/storage/gpx/MetadataTest.java     | 10 +--
 .../sis/internal/storage/gpx/UpdaterTest.java      |  4 +-
 .../sis/internal/storage/gpx/WriterTest.java       | 31 ++++----
 82 files changed, 382 insertions(+), 421 deletions(-)

diff --git a/application/sis-javafx/src/test/java/org/apache/sis/internal/gui/GUIUtilitiesTest.java b/application/sis-javafx/src/test/java/org/apache/sis/internal/gui/GUIUtilitiesTest.java
index a83c56a2ce..81d6487953 100644
--- a/application/sis-javafx/src/test/java/org/apache/sis/internal/gui/GUIUtilitiesTest.java
+++ b/application/sis-javafx/src/test/java/org/apache/sis/internal/gui/GUIUtilitiesTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.internal.gui;
 
-import java.util.Arrays;
 import java.util.List;
 import javafx.scene.control.TreeItem;
 import javafx.scene.paint.Color;
@@ -118,9 +117,9 @@ public final strictfp class GUIUtilitiesTest extends TestCase {
      */
     @Test
     public void testLongestCommonSubsequence() {
-        final List<Integer> x = Arrays.asList(1, 2, 4, 6, 7,    9);
-        final List<Integer> y = Arrays.asList(1, 2,    3, 7, 8);
-        assertEquals(Arrays.asList(1, 2, 7), GUIUtilities.longestCommonSubsequence(x, y));
+        final List<Integer> x = List.of(1, 2, 4, 6, 7,    9);
+        final List<Integer> y = List.of(1, 2,    3, 7, 8);
+        assertEquals(List.of(1, 2, 7), GUIUtilities.longestCommonSubsequence(x, y));
     }
 
     /**
diff --git a/core/sis-build-helper/src/main/java/org/apache/sis/internal/book/CodeColorizer.java b/core/sis-build-helper/src/main/java/org/apache/sis/internal/book/CodeColorizer.java
index 7295eab09b..2026323d0a 100644
--- a/core/sis-build-helper/src/main/java/org/apache/sis/internal/book/CodeColorizer.java
+++ b/core/sis-build-helper/src/main/java/org/apache/sis/internal/book/CodeColorizer.java
@@ -16,10 +16,7 @@
  */
 package org.apache.sis.internal.book;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.io.BufferedReader;
@@ -47,7 +44,7 @@ public final class CodeColorizer {
     /**
      * Lists of Java keywords.
      */
-    public static final Set<String> JAVA_KEYWORDS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
+    public static final Set<String> JAVA_KEYWORDS = Set.of(
         "abstract", "continue", "for",        "new",        "switch",
         "assert",   "default",  "goto",       "package",    "synchronized",
         "boolean",  "do",       "if",         "private",    "this",
@@ -58,7 +55,7 @@ public final class CodeColorizer {
         "char",     "final",    "interface",  "static",     "void",
         "class",    "finally",  "long",       "strictfp",   "volatile",
         "const",    "float",    "native",     "super",      "while",
-        /* literals: */ "true", "false", "null")));
+        /* literals: */ "true", "false", "null");
 
     /**
      * Returns all nodes in the given list as an array. This method is used for getting a snapshot
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
index af6ec2793c..4a9afa8405 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
@@ -19,7 +19,6 @@ package org.apache.sis.filter;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.List;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Calendar;
@@ -825,7 +824,7 @@ abstract class ComparisonFilter<R> extends BinaryFunction<R,Object,Object>
 
         /** Returns the expression to be compared by this operator, together with boundaries. */
         @Override public List<Expression<? super R, ?>> getExpressions() {
-            return Arrays.asList(lower.expression1, lower.expression2, upper.expression2);
+            return List.of(lower.expression1, lower.expression2, upper.expression2);
         }
 
         /** Returns the expression to be compared. */
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java b/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
index 28d80869bd..b0c1afcd13 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.filter;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import org.opengis.util.ScopedName;
 import org.apache.sis.util.ObjectConverter;
@@ -126,7 +126,7 @@ final class ConvertFunction<R,S,V> extends UnaryFunction<R,S>
      */
     @Override
     protected Collection<?> getChildren() {
-        return Arrays.asList(expression, converter.getSourceClass(), converter.getTargetClass());
+        return List.of(expression, converter.getSourceClass(), converter.getTargetClass());
     }
 
     /**
diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java b/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
index 1db9b1493a..a4348b1ca1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
@@ -16,11 +16,9 @@
  */
 package org.apache.sis.filter;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import java.util.Collection;
-import java.util.Collections;
 import org.apache.sis.feature.Features;
 import org.apache.sis.util.ObjectConverter;
 import org.apache.sis.util.ObjectConverters;
@@ -141,7 +139,7 @@ split:  if (path != null) {
      */
     @Override
     protected final Collection<?> getChildren() {
-        return isVirtual ? Arrays.asList(name, isVirtual) : Collections.singleton(name);
+        return isVirtual ? List.of(name, isVirtual) : List.of(name);
     }
 
     /**
diff --git a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BufferedGridCoverageTest.java b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BufferedGridCoverageTest.java
index 1efaf01c55..40cc8ea8fc 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BufferedGridCoverageTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BufferedGridCoverageTest.java
@@ -82,7 +82,7 @@ public final strictfp class BufferedGridCoverageTest extends GridCoverage2DTest
         final int nbTime = 3;
         final GridExtent extent = new GridExtent(null, null, new long[] {width, height, nbTime}, false);
         final GridGeometry domain = new GridGeometry(extent, PixelInCell.CELL_CENTER, MathTransforms.scale(2, 3, 5), null);
-        final SampleDimension band = new SampleDimension(Names.createLocalName(null, null, "Data"), null, Collections.emptyList());
+        final SampleDimension band = new SampleDimension(Names.createLocalName(null, null, "Data"), null, List.of());
         /*
          * Fill slices with all values set to 10, 11 and 12 at time t=0, 1 and 2 respectively.
          * All values are stored in a single bank.
diff --git a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java
index 091b18ee13..a52e00e809 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.feature;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.EnumSet;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.HashMap;
@@ -151,7 +151,7 @@ public final strictfp class FeatureFormatTest extends TestCase {
         final AbstractFeature feature = isSparse ? new SparseFeature(type) : new DenseFeature(type);
         feature.setPropertyValue("city", "Tokyo");
         feature.setPropertyValue("population", 13185502);                               // In 2011.
-        feature.setPropertyValue("universities", Arrays.asList("Waseda", "Keio"));
+        feature.setPropertyValue("universities", List.of("Waseda", "Keio"));
         feature.setPropertyValue("temperature", Float.NaN);
 
         final FeatureFormat format = create();
diff --git a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureOperationsTest.java b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureOperationsTest.java
index ac08c5889e..612737fc45 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureOperationsTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureOperationsTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.feature;
 
-import java.util.Arrays;
 import java.util.Map;
+import java.util.List;
 import java.util.Collections;
 import com.esri.core.geometry.Point;
 import com.esri.core.geometry.Polygon;
@@ -110,7 +110,7 @@ public final strictfp class FeatureOperationsTest extends TestCase {
         assertInstanceOf("bounds", EnvelopeOperation.class, property);
         final EnvelopeOperation op = (EnvelopeOperation) property;
         assertSame("targetCRS", HardCodedCRS.WGS84, op.targetCRS);
-        assertSetEquals(Arrays.asList("classes", "climbing wall", "gymnasium"), op.getDependencies());
+        assertSetEquals(List.of("classes", "climbing wall", "gymnasium"), op.getDependencies());
     }
 
     /**
diff --git a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
index 32cd40a4ff..8e69ddf2ff 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.feature;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.Collections;
 import org.opengis.metadata.quality.DataQuality;
@@ -251,7 +251,7 @@ public abstract strictfp class FeatureTestCase extends TestCase {
          * Set the attribute value on a property having [0 … ∞] multiplicity.
          * The feature implementation should put the value in a list.
          */
-        assertEquals("universities", Collections.emptyList(), getAttributeValue("universities"));
+        assertEquals("universities", List.of(), getAttributeValue("universities"));
         feature.setPropertyValue("universities", "University of arts");
         assertEquals("universities", Collections.singletonList("University of arts"), getAttributeValue("universities"));
         /*
@@ -360,7 +360,7 @@ public abstract strictfp class FeatureTestCase extends TestCase {
         assertTrue("isEmpty", values.isEmpty());
         // Cannot perform values.add("something") here.
 
-        feature.setPropertyValue("universities", Arrays.asList("UCAR", "Marie-Curie"));
+        feature.setPropertyValue("universities", List.of("UCAR", "Marie-Curie"));
         values = (Collection<?>) feature.getPropertyValue("universities");
         assertArrayEquals(new String[] {"UCAR", "Marie-Curie"}, values.toArray());
     }
diff --git a/core/sis-feature/src/test/java/org/apache/sis/feature/builder/AttributeTypeBuilderTest.java b/core/sis-feature/src/test/java/org/apache/sis/feature/builder/AttributeTypeBuilderTest.java
index e9cf8b5e0c..1e87cada7b 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/builder/AttributeTypeBuilderTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/builder/AttributeTypeBuilderTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.feature.builder;
 
-import java.util.Arrays;
 import java.util.Set;
+import java.util.List;
 import java.util.Collections;
 import com.esri.core.geometry.Geometry;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -236,7 +236,7 @@ public final strictfp class AttributeTypeBuilderTest extends TestCase {
         assertFalse("add(DEFAULT_GEOMETRY)", builder.addRole(AttributeRole.DEFAULT_GEOMETRY));
 
         assertTrue("add(IDENTIFIER_COMPONENT)", roles.add(AttributeRole.IDENTIFIER_COMPONENT));
-        assertSetEquals(Arrays.asList(AttributeRole.DEFAULT_GEOMETRY, AttributeRole.IDENTIFIER_COMPONENT), roles);
+        assertSetEquals(List.of(AttributeRole.DEFAULT_GEOMETRY, AttributeRole.IDENTIFIER_COMPONENT), roles);
         assertFalse("add(IDENTIFIER_COMPONENT)", roles.add(AttributeRole.IDENTIFIER_COMPONENT));
 
         assertTrue("remove(DEFAULT_GEOMETRY)", roles.remove(AttributeRole.DEFAULT_GEOMETRY));
diff --git a/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java b/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
index 8dd829b507..6639491972 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.filter;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.function.Function;
@@ -143,7 +143,7 @@ public final strictfp class LogicalFilterTest extends TestCase {
         assertEquals(expected, filter.test(null));
         assertSerializedEquals(filter);
 
-        filter = anyArity.apply(Arrays.asList(f1, f2, f1));
+        filter = anyArity.apply(List.of(f1, f2, f1));
         assertArrayEquals(new Filter<?>[] {f1, f2, f1}, filter.getOperands().toArray());
         assertEquals(expected, filter.test(null));
         assertSerializedEquals(filter);
diff --git a/core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ColorizerTest.java b/core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ColorizerTest.java
index 3eceb31cf3..41049e7805 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ColorizerTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ColorizerTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.coverage.j2d;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.AbstractMap.SimpleEntry;
 import java.awt.Color;
@@ -50,7 +50,7 @@ public final strictfp class ColorizerTest extends TestCase {
      */
     @Test
     public void testRangeAndColors() throws TransformException {
-        final Colorizer colorizer = new Colorizer(Arrays.asList(
+        final Colorizer colorizer = new Colorizer(List.of(
                 new SimpleEntry<>(NumberRange.create(0, true,  0, true), new Color[] {Color.GRAY}),
                 new SimpleEntry<>(NumberRange.create(1, true,  1, true), new Color[] {ColorModelFactory.TRANSPARENT}),
                 new SimpleEntry<>(NumberRange.create(2, true, 15, true), new Color[] {Color.BLUE, Color.WHITE, Color.RED})));
diff --git a/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java b/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
index 59acd7822e..a6cec06868 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.feature;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.EnumSet;
 import java.util.Iterator;
 import org.opengis.geometry.Envelope;
@@ -127,7 +127,7 @@ public abstract strictfp class GeometriesTestCase extends TestCase {
      */
     @Test
     public void testMergePolylines() {
-        final Iterator<Object> c1 = Arrays.asList(
+        final Iterator<Object> c1 = List.of(
                 factory.createPoint(  4,   5),
                 factory.createPoint(  7,   9),
                 factory.createPoint(  9,   3),
@@ -137,14 +137,14 @@ public abstract strictfp class GeometriesTestCase extends TestCase {
                 factory.createPoint( -2,  -5),
                 factory.createPoint( -1,  -6)).iterator();
 
-        final Iterator<Object> c2 = Arrays.asList(
+        final Iterator<Object> c2 = List.of(
                 factory.createPoint( 14,  12),
                 factory.createPoint( 15,  11),
                 factory.createPoint( 13,  10)).iterator();
 
         final Object g1 = factory.castOrWrap(c1.next()).mergePolylines(c1);
         final Object g2 = factory.castOrWrap(c2.next()).mergePolylines(c2);
-        geometry = factory.castOrWrap(g1).mergePolylines(Arrays.asList(factory.createPoint(13, 11), g2).iterator());
+        geometry = factory.castOrWrap(g1).mergePolylines(List.of(factory.createPoint(13, 11), g2).iterator());
 
         createWrapper();
         final GeneralEnvelope env = wrapper.getEnvelope();
diff --git a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java
index cf38988806..fc0b8f82e2 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.filter;
 
 import java.util.List;
-import java.util.Collections;
 import java.lang.reflect.Field;
 import org.apache.sis.internal.filter.sqlmm.SQLMM;
 import org.apache.sis.test.TestCase;
@@ -61,7 +60,7 @@ public final strictfp class FunctionNamesTest extends TestCase {
      * Base class for dummy implementation of filter.
      */
     private static abstract class FilterBase implements ComparisonOperator<Object> {
-        @Override public List<Expression<Object,?>> getExpressions() {return Collections.emptyList();}
+        @Override public List<Expression<Object,?>> getExpressions() {return List.of();}
         @Override public boolean test(Object resource) {return false;}
     }
 
diff --git a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryTestCase.java b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryTestCase.java
index a228df9103..a8e303d2bf 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryTestCase.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryTestCase.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.filter.sqlmm;
 
-import java.util.Arrays;
+import java.util.List;
 import org.opengis.geometry.DirectPosition;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.crs.GeographicCRS;
@@ -422,8 +422,8 @@ public abstract strictfp class RegistryTestCase<G> extends TestCase {
     public void testLineString() {
         assertRequireArguments("ST_LineString");
         final Object result = evaluate("ST_LineString",
-                Arrays.asList(library.createPoint(10, 20),
-                              library.createPoint(30, 40)), HardCodedCRS.WGS84);
+                List.of(library.createPoint(10, 20),
+                        library.createPoint(30, 40)), HardCodedCRS.WGS84);
         assertPolylineEquals(result, HardCodedCRS.WGS84, 10, 20, 30, 40);
     }
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/CodeListMarshallingTest.java b/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/CodeListMarshallingTest.java
index 45b64a9a21..2aab8902ed 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/CodeListMarshallingTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/CodeListMarshallingTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.jaxb.cat;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import java.util.Collections;
 import javax.xml.bind.Marshaller;
@@ -196,7 +196,7 @@ public final strictfp class CodeListMarshallingTest extends TestCase {
     @Test
     public void testExtraCodes() throws JAXBException {
         final DefaultCitation id = new DefaultCitation();
-        id.setPresentationForms(Arrays.asList(
+        id.setPresentationForms(List.of(
                 PresentationForm.valueOf("IMAGE_DIGITAL"),      // Existing code with UML id="imageDigital"
                 PresentationForm.valueOf("test")));             // New code
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/EnumMarshallingTest.java b/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/EnumMarshallingTest.java
index a877637776..9a879c4ded 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/EnumMarshallingTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/internal/jaxb/cat/EnumMarshallingTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.jaxb.cat;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.EnumSet;
 import java.util.Collection;
 import javax.xml.bind.JAXBException;
@@ -46,7 +46,7 @@ public final strictfp class EnumMarshallingTest extends TestCase {
      */
     @Test
     public void testTopicCategories() throws JAXBException {
-        final Collection<TopicCategory> topics = Arrays.asList(
+        final List<TopicCategory> topics = List.of(
                 TopicCategory.OCEANS,
                 TopicCategory.ENVIRONMENT,
                 TopicCategory.IMAGERY_BASE_MAPS_EARTH_COVER);   // We need to test at least one enum with many words.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/ImplementationHelperTest.java b/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/ImplementationHelperTest.java
index 0ba376708c..385ee365c0 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/ImplementationHelperTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/ImplementationHelperTest.java
@@ -17,6 +17,7 @@
 package org.apache.sis.internal.metadata;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
@@ -66,11 +67,11 @@ public final strictfp class ImplementationHelperTest extends TestCase {
         locales = ImplementationHelper.setFirst(null, GERMAN);
         assertArrayEquals(new Locale[] {GERMAN}, locales.toArray());
 
-        locales = Arrays.asList(ENGLISH, JAPANESE, FRENCH);
+        locales = Arrays.asList(ENGLISH, JAPANESE, FRENCH);                 // Content will be modified.
         assertSame("Shall set value in-place.", locales, ImplementationHelper.setFirst(locales, GERMAN));
         assertArrayEquals(new Locale[] {GERMAN, JAPANESE, FRENCH}, locales.toArray());
 
-        locales = new LinkedHashSet<>(Arrays.asList(ENGLISH, JAPANESE, FRENCH));
+        locales = new LinkedHashSet<>(List.of(ENGLISH, JAPANESE, FRENCH));
         locales = ImplementationHelper.setFirst(locales, ITALIAN);
         assertArrayEquals(new Locale[] {ITALIAN, JAPANESE, FRENCH}, locales.toArray());
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/MergerTest.java b/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/MergerTest.java
index e3ef4bd3a6..b5cc133401 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/MergerTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/MergerTest.java
@@ -16,7 +16,8 @@
  */
 package org.apache.sis.internal.metadata;
 
-import java.util.Arrays;
+import java.util.Set;
+import java.util.List;
 import java.util.Locale;
 import java.util.Iterator;
 import java.util.Collections;
@@ -56,7 +57,7 @@ public final strictfp class MergerTest extends TestCase {
         final DefaultCoverageDescription         coverage = new DefaultCoverageDescription();
         final DefaultImageDescription            image    = new DefaultImageDescription();
         final DefaultMetadata                    metadata = new DefaultMetadata();
-        features.setFeatureCatalogueCitations(Collections.singleton(new DefaultCitation("Shapefile")));
+        features.setFeatureCatalogueCitations(Set.of(new DefaultCitation("Shapefile")));
         features.setIncludedWithDataset(Boolean.TRUE);
         metadata.getContentInfo().add(features);
 
@@ -82,7 +83,7 @@ public final strictfp class MergerTest extends TestCase {
         image.setProcessingLevelCode(new DefaultIdentifier("Level 2"));
         metadata.getContentInfo().add(image);
 
-        features.setFeatureCatalogueCitations(Collections.singleton(new DefaultCitation("GPX file")));
+        features.setFeatureCatalogueCitations(Set.of(new DefaultCitation("GPX file")));
         features.setIncludedWithDataset(Boolean.TRUE);
         metadata.getContentInfo().add(features);
 
@@ -101,9 +102,9 @@ public final strictfp class MergerTest extends TestCase {
         final Merger merger = new Merger(null);
         merger.copy(source, target);
 
-        assertSetEquals(Arrays.asList(Locale.JAPANESE, Locale.FRENCH),
+        assertSetEquals(List.of(Locale.JAPANESE, Locale.FRENCH),
                         target.getLocalesAndCharsets().keySet());
-        assertSetEquals(Arrays.asList(StandardCharsets.UTF_16, StandardCharsets.UTF_8),
+        assertSetEquals(List.of(StandardCharsets.UTF_16, StandardCharsets.UTF_8),
                         target.getLocalesAndCharsets().values());
 
         final Iterator<ContentInformation> it       = target.getContentInfo().iterator();
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/HashCodeTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/HashCodeTest.java
index f013c0cf9e..6b6eb621ab 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/HashCodeTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/HashCodeTest.java
@@ -16,7 +16,8 @@
  */
 package org.apache.sis.metadata;
 
-import java.util.Arrays;
+import java.util.Set;
+import java.util.List;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.Identifier;
 import org.opengis.metadata.citation.Role;
@@ -37,7 +38,6 @@ import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
-import static java.util.Collections.singleton;
 import static org.junit.Assert.*;
 
 
@@ -74,9 +74,9 @@ public final strictfp class HashCodeTest extends TestCase {
         assertEquals("Metadata with a single value.", Integer.valueOf(baseCode + title.hashCode()), hash(instance));
 
         final InternationalString alternateTitle = new SimpleInternationalString("Another title");
-        instance.setAlternateTitles(singleton(alternateTitle));
+        instance.setAlternateTitles(Set.of(alternateTitle));
         assertEquals("Metadata with two values.",
-                     Integer.valueOf(baseCode + title.hashCode() + Arrays.asList(alternateTitle).hashCode()),
+                     Integer.valueOf(baseCode + title.hashCode() + List.of(alternateTitle).hashCode()),
                      hash(instance));
     }
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/InformationMapTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/InformationMapTest.java
index 66cc785861..2bc673bcb9 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/InformationMapTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/InformationMapTest.java
@@ -18,8 +18,6 @@ package org.apache.sis.metadata;
 
 import java.util.Map;
 import java.util.Set;
-import java.util.HashSet;
-import java.util.Arrays;
 import java.util.Locale;
 import org.opengis.metadata.ExtendedElementInformation;
 import org.opengis.metadata.acquisition.EnvironmentalRecord;
@@ -68,9 +66,9 @@ public final strictfp class InformationMapTest extends TestCase {
         final Map<String,ExtendedElementInformation> descriptions = MetadataStandard.ISO_19115.asInformationMap(
                 EnvironmentalRecord.class, KeyNamePolicy.UML_IDENTIFIER);
 
-        final Set<String> expected = new HashSet<>(Arrays.asList(
+        final Set<String> expected = Set.of(
             "averageAirTemperature", "maxAltitude", "maxRelativeHumidity", "meteorologicalConditions"
-        ));
+        );
         assertEquals(expected, descriptions.keySet());
     }
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyAccessorTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyAccessorTest.java
index b0d1b39fc7..e3b89e5ec8 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyAccessorTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/PropertyAccessorTest.java
@@ -19,7 +19,6 @@ package org.apache.sis.metadata;
 import java.util.Map;
 import java.util.Set;
 import java.util.List;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Locale;
@@ -436,10 +435,10 @@ public final strictfp class PropertyAccessorTest extends TestCase {
     @DependsOnMethod("testSet")
     public void testSetCollection() {
         final DefaultCitation instance = new DefaultCitation("Ignored title");
-        final List<InternationalString> oldTitles = Arrays.<InternationalString>asList(
+        final List<InternationalString> oldTitles = List.of(
                 new SimpleInternationalString("Old title 1"),
                 new SimpleInternationalString("Old title 2"));
-        final List<InternationalString> newTitles = Arrays.<InternationalString>asList(
+        final List<InternationalString> newTitles = List.of(
                 new SimpleInternationalString("New title 1"),
                 new SimpleInternationalString("New title 2"));
 
@@ -521,7 +520,7 @@ public final strictfp class PropertyAccessorTest extends TestCase {
         }
 
         // Check final collection content.
-        final List<InternationalString> expected = Arrays.asList(title1, title2);
+        final List<InternationalString> expected = List.of(title1, title2);
         assertEquals("alternateTitles", expected, accessor.get(index, instance));
         assertTitleEquals("title", "Ignored title", instance);
     }
@@ -545,10 +544,10 @@ public final strictfp class PropertyAccessorTest extends TestCase {
      */
     public void testSetInAppendMode() {
         final DefaultCitation instance = new DefaultCitation();
-        final List<InternationalString> oldTitles = Arrays.<InternationalString>asList(
+        final List<InternationalString> oldTitles = List.of(
                 new SimpleInternationalString("Old title 1"),
                 new SimpleInternationalString("Old title 2"));
-        final List<InternationalString> newTitles = Arrays.<InternationalString>asList(
+        final List<InternationalString> newTitles = List.of(
                 new SimpleInternationalString("New title 1"),
                 new SimpleInternationalString("New title 2"));
         final List<InternationalString> merged = new ArrayList<>(oldTitles);
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeNodeChildrenTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeNodeChildrenTest.java
index 4eb499ebe7..ea9499f86d 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeNodeChildrenTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeNodeChildrenTest.java
@@ -19,9 +19,9 @@ package org.apache.sis.metadata;
 import java.util.Date;
 import java.util.Random;
 import java.util.Iterator;
+import java.util.Set;
 import java.util.List;
 import java.util.ArrayList;
-import java.util.Collections;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.citation.DateType;
 import org.opengis.metadata.citation.PresentationForm;
@@ -70,7 +70,7 @@ public final strictfp class TreeNodeChildrenTest extends TestCase {
     static DefaultCitation metadataWithoutCollections() {
         final DefaultCitation citation = new DefaultCitation("Some title");
         citation.setEdition(new SimpleInternationalString("Some edition"));
-        citation.setOtherCitationDetails(Collections.singleton(new SimpleInternationalString("Some other details")));
+        citation.setOtherCitationDetails(Set.of(new SimpleInternationalString("Some other details")));
         return citation;
     }
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
index 9d8c298790..f999c21e04 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.metadata;
 
-import java.util.Arrays;
+import java.util.List;
 import org.opengis.metadata.citation.Role;
 import org.opengis.metadata.citation.PresentationForm;
 import org.apache.sis.util.collection.TableColumn;
@@ -35,7 +35,6 @@ import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
-import static java.util.Arrays.asList;
 import static java.util.Collections.singleton;
 import static org.apache.sis.test.Assert.*;
 
@@ -116,7 +115,7 @@ public final strictfp class TreeTableFormatTest extends TestCase {
         coded   .setPresentationForms(singleton(PresentationForm.IMAGE_HARDCOPY));
         untitled.setCitedResponsibleParties(singleton(new DefaultResponsibility(Role.AUTHOR, null, null)));
         final DefaultProcessing processing = new DefaultProcessing();
-        processing.setDocumentations(asList(titled, coded, untitled));
+        processing.setDocumentations(List.of(titled, coded, untitled));
         final String text = format.format(processing.asTreeTable());
         assertMultilinesEquals(
             "Processing\n" +
@@ -135,7 +134,7 @@ public final strictfp class TreeTableFormatTest extends TestCase {
     @Test
     public void testImageDescription() {
         final DefaultImageDescription image = new DefaultImageDescription();
-        image.setAttributeGroups(Arrays.asList(
+        image.setAttributeGroups(List.of(
             new DefaultAttributeGroup(null, createBand(0.25, 0.26)),
             new DefaultAttributeGroup(null, createBand(0.28, 0.29))
         ));
@@ -160,12 +159,12 @@ public final strictfp class TreeTableFormatTest extends TestCase {
     @Test
     public void testTreeWithCustomElements() {
         final DefaultCitation citation = new DefaultCitation();
-        citation.setAlternateTitles(Arrays.asList(
+        citation.setAlternateTitles(List.of(
                 new SimpleInternationalString("Apple"),
                 new SimpleInternationalString("Orange"),
                 new SimpleInternationalString("Kiwi")));
 
-        citation.setPresentationForms(Arrays.asList(
+        citation.setPresentationForms(List.of(
                 PresentationForm.IMAGE_DIGITAL,
                 PresentationForm.valueOf("AUDIO_DIGITAL"),  // Existing form
                 PresentationForm.valueOf("test")));         // Custom form
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/ValueMapTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/ValueMapTest.java
index a5d58b5112..965966d77f 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/ValueMapTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/ValueMapTest.java
@@ -17,6 +17,8 @@
 package org.apache.sis.metadata;
 
 import java.util.Map;
+import java.util.Set;
+import java.util.List;
 import java.util.Collection;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.Identifier;
@@ -32,10 +34,6 @@ import org.junit.Test;
 
 import static org.opengis.test.Assert.*;
 import static java.util.AbstractMap.SimpleEntry;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.singleton;
-import static java.util.Collections.singletonList;
 import static org.opengis.metadata.citation.PresentationForm.DOCUMENT_HARDCOPY;
 import static org.apache.sis.test.TestUtilities.getSingleton;
 
@@ -93,8 +91,8 @@ public final strictfp class ValueMapTest extends TestCase {
         title    = new SimpleInternationalString("Undercurrent");
         author   = new DefaultResponsibility();
         citation = new DefaultCitation(title);
-        author.setParties(singleton(new DefaultIndividual("Testsuya Toyoda", null, null)));
-        citation.setCitedResponsibleParties(singleton(author));
+        author.setParties(Set.of(new DefaultIndividual("Testsuya Toyoda", null, null)));
+        citation.setCitedResponsibleParties(Set.of(author));
         citation.setISBN("9782505004509");
         citation.setEdition(NilReason.UNKNOWN.createNilObject(InternationalString.class));
         return MetadataStandard.ISO_19115.asValueMap(citation, null, KeyNamePolicy.JAVABEANS_PROPERTY, ValueExistencePolicy.NON_EMPTY);
@@ -107,7 +105,7 @@ public final strictfp class ValueMapTest extends TestCase {
     public void testGet() {
         final Map<String,Object> map = createCitation();
         assertEquals("Undercurrent",                 map.get("title").toString());
-        assertEquals(singletonList(author),          map.get("citedResponsibleParties"));
+        assertEquals(List.of(author),                map.get("citedResponsibleParties"));
         assertEquals("9782505004509",                map.get("ISBN"));
         assertNull  ("NilObject shall be excluded.", map.get("edition"));
         /*
@@ -144,7 +142,7 @@ public final strictfp class ValueMapTest extends TestCase {
         assertArrayEquals(new SimpleEntry<?,?>[] {
             new SimpleEntry<>("title",                   title),
             new SimpleEntry<>("identifiers",             citation.getIdentifiers()),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
             new SimpleEntry<>("ISBN",                    "9782505004509")
         }, map.entrySet().toArray());
     }
@@ -167,15 +165,15 @@ public final strictfp class ValueMapTest extends TestCase {
         assertFalse("'all' shall be a larger map than 'map'.", map.entrySet().containsAll(all.entrySet()));
         assertArrayEquals(new SimpleEntry<?,?>[] {
             new SimpleEntry<>("title",                   title),
-            new SimpleEntry<>("alternateTitles",         emptyList()),
-            new SimpleEntry<>("dates",                   emptyList()),
+            new SimpleEntry<>("alternateTitles",         List.of()),
+            new SimpleEntry<>("dates",                   List.of()),
             new SimpleEntry<>("identifiers",             citation.getIdentifiers()),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
-            new SimpleEntry<>("presentationForms",       emptySet()),
-            new SimpleEntry<>("otherCitationDetails",    emptyList()),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
+            new SimpleEntry<>("presentationForms",       Set.of()),
+            new SimpleEntry<>("otherCitationDetails",    List.of()),
             new SimpleEntry<>("ISBN",                    "9782505004509"),
-            new SimpleEntry<>("onlineResources",         emptyList()),
-            new SimpleEntry<>("graphics",                emptyList())
+            new SimpleEntry<>("onlineResources",         List.of()),
+            new SimpleEntry<>("graphics",                List.of())
         }, all.entrySet().toArray());
     }
 
@@ -197,16 +195,16 @@ public final strictfp class ValueMapTest extends TestCase {
         assertFalse("'all' shall be a larger map than 'map'.", map.entrySet().containsAll(all.entrySet()));
         assertArrayEquals(new SimpleEntry<?,?>[] {
             new SimpleEntry<>("title",                   title),
-            new SimpleEntry<>("alternateTitles",         emptyList()),
-            new SimpleEntry<>("dates",                   emptyList()),
+            new SimpleEntry<>("alternateTitles",         List.of()),
+            new SimpleEntry<>("dates",                   List.of()),
             new SimpleEntry<>("edition",                 NilReason.UNKNOWN.createNilObject(InternationalString.class)),
             new SimpleEntry<>("identifiers",             citation.getIdentifiers()),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
-            new SimpleEntry<>("presentationForms",       emptySet()),
-            new SimpleEntry<>("otherCitationDetails",    emptyList()),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
+            new SimpleEntry<>("presentationForms",       Set.of()),
+            new SimpleEntry<>("otherCitationDetails",    List.of()),
             new SimpleEntry<>("ISBN",                    "9782505004509"),
-            new SimpleEntry<>("onlineResources",         emptyList()),
-            new SimpleEntry<>("graphics",                emptyList())
+            new SimpleEntry<>("onlineResources",         List.of()),
+            new SimpleEntry<>("graphics",                List.of())
         }, all.entrySet().toArray());
     }
 
@@ -226,20 +224,20 @@ public final strictfp class ValueMapTest extends TestCase {
         assertFalse("'all' shall be a larger map than 'map'.", map.entrySet().containsAll(all.entrySet()));
         assertArrayEquals(new SimpleEntry<?,?>[] {
             new SimpleEntry<>("title",                   title),
-            new SimpleEntry<>("alternateTitles",         emptyList()),
-            new SimpleEntry<>("dates",                   emptyList()),
+            new SimpleEntry<>("alternateTitles",         List.of()),
+            new SimpleEntry<>("dates",                   List.of()),
             new SimpleEntry<>("edition",                 NilReason.UNKNOWN.createNilObject(InternationalString.class)),
             new SimpleEntry<>("editionDate",             null),
             new SimpleEntry<>("identifiers",             citation.getIdentifiers()),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
-            new SimpleEntry<>("presentationForms",       emptySet()),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
+            new SimpleEntry<>("presentationForms",       Set.of()),
             new SimpleEntry<>("series",                  null),
-            new SimpleEntry<>("otherCitationDetails",    emptyList()),
+            new SimpleEntry<>("otherCitationDetails",    List.of()),
 //          new SimpleEntry<>("collectiveTitle",         null),  -- deprecated as of ISO 19115:2014.
             new SimpleEntry<>("ISBN",                    "9782505004509"),
             new SimpleEntry<>("ISSN",                    null),
-            new SimpleEntry<>("onlineResources",         emptyList()),
-            new SimpleEntry<>("graphics",                emptyList())
+            new SimpleEntry<>("onlineResources",         List.of()),
+            new SimpleEntry<>("graphics",                List.of())
         }, all.entrySet().toArray());
     }
 
@@ -264,8 +262,8 @@ public final strictfp class ValueMapTest extends TestCase {
         assertNull("ISBN shall have been removed.", citation.getISBN());
         assertTrue("ISBN shall have been removed.", citation.getIdentifiers().isEmpty());
         assertArrayEquals(new SimpleEntry<?,?>[] {
-            new SimpleEntry<>("title",                   title),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author))
+            new SimpleEntry<>("title", title),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author))
         }, map.entrySet().toArray());
         /*
          * Add a value. Result shall be:
@@ -279,9 +277,9 @@ public final strictfp class ValueMapTest extends TestCase {
         assertNull(map.put("presentationForm", DOCUMENT_HARDCOPY));
         assertEquals(DOCUMENT_HARDCOPY, getSingleton(citation.getPresentationForms()));
         assertArrayEquals(new SimpleEntry<?,?>[] {
-            new SimpleEntry<>("title",                   title),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
-            new SimpleEntry<>("presentationForms",       singleton(DOCUMENT_HARDCOPY))
+            new SimpleEntry<>("title", title),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
+            new SimpleEntry<>("presentationForms", Set.of(DOCUMENT_HARDCOPY))
         }, map.entrySet().toArray());
         /*
          * Add back the ISBN value. Result shall be:
@@ -300,8 +298,8 @@ public final strictfp class ValueMapTest extends TestCase {
         assertArrayEquals(new SimpleEntry<?,?>[] {
             new SimpleEntry<>("title",                   title),
             new SimpleEntry<>("identifiers",             citation.getIdentifiers()),
-            new SimpleEntry<>("citedResponsibleParties", singletonList(author)),
-            new SimpleEntry<>("presentationForms",       singleton(DOCUMENT_HARDCOPY)),
+            new SimpleEntry<>("citedResponsibleParties", List.of(author)),
+            new SimpleEntry<>("presentationForms",       Set.of(DOCUMENT_HARDCOPY)),
             new SimpleEntry<>("ISBN",                    "9782505004509")
         }, map.entrySet().toArray());
     }
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
index c01907e9c5..a23ef5488b 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.metadata.iso;
 
+import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Collection;
@@ -36,7 +37,6 @@ import org.apache.sis.test.xml.TestCase;
 import org.apache.sis.xml.XML;
 import org.junit.Test;
 
-import static java.util.Collections.singleton;
 import static org.junit.Assert.*;
 
 
@@ -110,7 +110,7 @@ public final strictfp class CustomMetadataTest extends TestCase {
             @Override public Collection<Extent>        getExtents()            {return null;}
         };
         final DefaultMetadata data = new DefaultMetadata();
-        data.setIdentificationInfo(singleton(identification));
+        data.setIdentificationInfo(Set.of(identification));
         final String xml = XML.marshal(data);
         /*
          * A few simple checks.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
index ddf453bd58..5a961e7dcc 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
@@ -18,7 +18,8 @@ package org.apache.sis.metadata.iso;
 
 import java.util.Date;
 import java.util.Locale;
-import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
 import java.util.Map;
 import java.util.Collection;
 import java.util.Collections;
@@ -145,7 +146,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             md.setMetadataIdentifier(id);
         }
         // Languages — one language only, and one (country, language) tuple.
-        final Collection<Locale> languages = Arrays.asList(Locale.ENGLISH, Locale.CANADA_FRENCH);
+        final Collection<Locale> languages = List.of(Locale.ENGLISH, Locale.CANADA_FRENCH);
         md.setLanguages(languages);
 
         // Character Sets (character encoding)
@@ -195,8 +196,8 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
              *       └─Position name………………………………………… Philosopher
              */
             final DefaultContact contact = new DefaultContact();
-            contact.setPhones(Arrays.asList(new DefaultTelephone("555-444-3333", TelephoneType.VOICE),
-                                            new DefaultTelephone("555-555-5555", TelephoneType.FACSIMILE)));
+            contact.setPhones(List.of(new DefaultTelephone("555-444-3333", TelephoneType.VOICE),
+                                      new DefaultTelephone("555-555-5555", TelephoneType.FACSIMILE)));
             {
                 {
                     // Address information
@@ -230,8 +231,8 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             final DefaultIndividual individual  = new DefaultIndividual("Socrates", "Philosopher", null);
             final DefaultIndividual individual2 = new DefaultIndividual("Hermocrates", "Politician", contact);
             final DefaultOrganisation org = new DefaultOrganisation("Plato Republic", null, individual, contact);
-            md.setContacts(Arrays.asList(new DefaultResponsibility(Role.POINT_OF_CONTACT, null, org),
-                                         new DefaultResponsibility(Role.POINT_OF_CONTACT, null, individual2)));
+            md.setContacts(List.of(new DefaultResponsibility(Role.POINT_OF_CONTACT, null, org),
+                                   new DefaultResponsibility(Role.POINT_OF_CONTACT, null, individual2)));
         }
         // Date info (date stamp in legacy ISO 19115:2003 model)
         final Collection<CitationDate> dateInfo = Collections.singleton(new DefaultCitationDate(new Date(1260961229580L), DateType.CREATION));
@@ -263,7 +264,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             final DefaultDimension cols = new DefaultDimension(DimensionNameType.COLUMN, 2233);
             rows.setResolution(10.0);
             cols.setResolution( 5.0);
-            georectified.setAxisDimensionProperties(Arrays.asList(rows, cols));
+            georectified.setAxisDimensionProperties(List.of(rows, cols));
             georectified.setCellGeometry(CellGeometry.AREA);
             georectified.setPointInPixel(PixelOrientation.UPPER_RIGHT);
             georectified.getCornerPoints().add(NilReason.MISSING.createNilObject(Point.class));
@@ -404,7 +405,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             resolution.setDistance(56777.0);
             dataId.getSpatialResolutions().add(resolution);
         }
-        dataId.setTopicCategories(Arrays.asList(TopicCategory.OCEANS, TopicCategory.SOCIETY));
+        dataId.setTopicCategories(List.of(TopicCategory.OCEANS, TopicCategory.SOCIETY));
         dataId.getStatus().add(Progress.HISTORICAL_ARCHIVE);
         /*
          * Citation………………………………………………………… A lost island
@@ -420,12 +421,12 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
         cit.setEdition(new SimpleInternationalString("First edition"));
         cit.setEditionDate(new Date(1523311200000L));
         cit.setCollectiveTitle(new SimpleInternationalString("Popular legends"));
-        cit.setAlternateTitles(Arrays.asList(new SimpleInternationalString("Island lost again"),
-                                             new Anchor(new URI("http://map-example.com"), "Map example")));
+        cit.setAlternateTitles(List.of(new SimpleInternationalString("Island lost again"),
+                                       new Anchor(new URI("http://map-example.com"), "Map example")));
         cit.getDates().add(new DefaultCitationDate(new Date(1523224800000L), DateType.CREATION));
         cit.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "lost-island");
         dataId.setCitation(cit);
-        dataId.setTemporalResolutions(Collections.emptySet());          // TODO: need a more complete sis-temporal.
+        dataId.setTemporalResolutions(Set.of());          // TODO: need a more complete sis-temporal.
         final Collection<MaintenanceInformation> resourceMaintenances;
         {
             /*
@@ -487,8 +488,8 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             final DefaultKeywordClass keywordClass = new DefaultKeywordClass();
             keywordClass.setClassName(new SimpleInternationalString("Greek elements"));
             keywords.setKeywordClass(keywordClass);
-            keywords.setKeywords(Arrays.asList(new SimpleInternationalString("Water"),
-                                               new SimpleInternationalString("Aether")));
+            keywords.setKeywords(List.of(new SimpleInternationalString("Water"),
+                                         new SimpleInternationalString("Aether")));
             keywords.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "greek-elements");
             descriptiveKeywords = Collections.singleton(keywords);
             dataId.setDescriptiveKeywords(descriptiveKeywords);
@@ -545,7 +546,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             }
             serviceId.getContainsOperations().add(operationMetadata);
             serviceId.getOperatesOn().add(dataId);
-            md.setIdentificationInfo(Arrays.asList(dataId, serviceId));
+            md.setIdentificationInfo(List.of(dataId, serviceId));
         }
         {
             // Content info
@@ -587,7 +588,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
                     sampleDimension.setMaxValue(22.22);
                     sampleDimension.setUnits(Units.CELSIUS);
                     sampleDimension.setScaleFactor(1.5);
-                    attributeGroup.setAttributes(Arrays.asList(rangeDimension, sampleDimension));
+                    attributeGroup.setAttributes(List.of(rangeDimension, sampleDimension));
                     coverageDescription.getAttributeGroups().add(attributeGroup);
                 }
             }
@@ -595,7 +596,7 @@ public final class MarshallingTest extends TestUsingFile implements Filter {
             final DefaultFeatureCatalogueDescription featureCatalogueDescription = new DefaultFeatureCatalogueDescription();
             featureCatalogueDescription.setIncludedWithDataset(true);
             featureCatalogueDescription.setCompliant(true);
-            md.setContentInfo(Arrays.asList(coverageDescription, featureCatalogueDescription));
+            md.setContentInfo(List.of(coverageDescription, featureCatalogueDescription));
         }
         return md;
     }
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
index dabbd9c224..c9faf85073 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
@@ -18,7 +18,6 @@ package org.apache.sis.metadata.iso.citation;
 
 import java.util.Set;
 import java.util.List;
-import java.util.Arrays;
 import java.util.Locale;
 import java.util.Collection;
 import java.util.Collections;
@@ -288,7 +287,7 @@ public final strictfp class CitationsTest extends TestCase {
         final Identifier ogc = new DefaultIdentifier("OGC", "06-042", null);
         final Identifier iso = new DefaultIdentifier("ISO", "19128", null);
         final DefaultCitation citation = new DefaultCitation("Web Map Server");
-        citation.setIdentifiers(Arrays.asList(ogc, iso, new DefaultIdentifier("Foo", "06-042", null)));
+        citation.setIdentifiers(List.of(ogc, iso, new DefaultIdentifier("Foo", "06-042", null)));
         assertTrue ("With full identifier",  Citations.identifierMatches(citation, ogc, ogc.getCode()));
         assertTrue ("With full identifier",  Citations.identifierMatches(citation, iso, iso.getCode()));
         assertFalse("With wrong code",       Citations.identifierMatches(citation, new DefaultIdentifier("ISO", "19115", null), "19115"));
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
index 98605b4a16..a38d2ebc3f 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
@@ -17,7 +17,7 @@
 package org.apache.sis.metadata.iso.citation;
 
 import java.net.URI;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
@@ -82,12 +82,12 @@ public final strictfp class DefaultCitationTest extends TestUsingFile {
         title.add(Locale.ENGLISH,  "Undercurrent");
         citation.setTitle(title);
         citation.setISBN("9782505004509");
-        citation.setPresentationForms(Arrays.asList(
+        citation.setPresentationForms(List.of(
                 PresentationForm.DOCUMENT_HARDCOPY,
                 PresentationForm.DOCUMENT_DIGITAL));
         citation.setAlternateTitles(Collections.singleton(
                 new SimpleInternationalString("Andākarento")));   // Actually a different script of the Japanese title.
-        citation.setCitedResponsibleParties(Arrays.asList(
+        citation.setCitedResponsibleParties(List.of(
                 new DefaultResponsibility(Role.AUTHOR, null, new DefaultIndividual("Testsuya Toyoda", null, null)),
                 new DefaultResponsibility(Role.EDITOR, Extents.WORLD, new DefaultOrganisation("Kōdansha", null, null, null))));
         return citation;
@@ -115,7 +115,7 @@ public final strictfp class DefaultCitationTest extends TestUsingFile {
          * The ISSN code shall be retained because it is a new code.
          */
         assertNull("ISSN shall be initially null.", citation.getISSN());
-        citation.setIdentifiers(Arrays.asList(
+        citation.setIdentifiers(List.of(
                 new DefaultIdentifier(Citations.NETCDF, "MyNetCDF"),
                 new DefaultIdentifier(Citations.EPSG,   "MyEPSG"),
                 new DefaultIdentifier(Citations.ISBN,   "NewISBN"),
@@ -247,7 +247,7 @@ public final strictfp class DefaultCitationTest extends TestUsingFile {
         contact.setContactInstructions(new SimpleInternationalString("Send carrier pigeon."));
         contact.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "ip-protocol");
         final DefaultCitation c = new DefaultCitation("Fight against poverty");
-        c.setCitedResponsibleParties(Arrays.asList(
+        c.setCitedResponsibleParties(List.of(
                 new DefaultResponsibility(Role.ORIGINATOR, null, new DefaultIndividual("Maid Marian", null, contact)),
                 new DefaultResponsibility(Role.FUNDER,     null, new DefaultIndividual("Robin Hood",  null, contact))
         ));
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
index 598b702fc6..1f001a364b 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.metadata.iso.citation;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.logging.Filter;
 import java.util.logging.LogRecord;
@@ -88,7 +88,7 @@ public final strictfp class DefaultContactTest extends TestCase implements Filte
         final DefaultTelephone   tel4 = new DefaultTelephone("00.04", TelephoneType.VOICE);
         final DefaultTelephone[] tels = new DefaultTelephone[] {tel1, tel2, tel3, tel4};
         final DefaultContact  contact = new DefaultContact();
-        contact.setPhones(Arrays.asList(tel1, tel2, tel3, tel4));
+        contact.setPhones(List.of(tel1, tel2, tel3, tel4));
         assertArrayEquals("getPhones", tels, contact.getPhones().toArray());
         /*
          * Test the deprecated 'getPhone()' method. Invoking that method shall emit
@@ -149,8 +149,8 @@ public final strictfp class DefaultContactTest extends TestCase implements Filte
     private void testSetPhone(final boolean hideSIS) {
         init();
         final DefaultTelephone tel = new DefaultTelephone();
-        tel.setVoices(Arrays.asList("00.02", "00.04"));
-        tel.setFacsimiles(Arrays.asList("00.03"));
+        tel.setVoices(List.of("00.02", "00.04"));
+        tel.setFacsimiles(List.of("00.03"));
         final Telephone view;
         if (hideSIS) {
             view = new Telephone() {
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java
index 1dabcbfd47..0974ad48d1 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.sis.metadata.iso.citation;
 
+import java.util.Set;
 import javax.xml.bind.JAXBException;
 import org.opengis.metadata.citation.Role;
 import org.apache.sis.test.xml.TestCase;
 import org.apache.sis.internal.xml.LegacyNamespaces;
 import org.junit.Test;
 
-import static java.util.Collections.singleton;
 import static org.apache.sis.test.MetadataAssert.*;
 
 
@@ -46,7 +46,7 @@ public final strictfp class DefaultResponsibilityTest extends TestCase {
         final DefaultIndividual  party = new DefaultIndividual("An author", null, null);
         final DefaultResponsibility  r = new DefaultResponsibility(Role.AUTHOR, null, party);
         final DefaultCitation citation = new DefaultCitation();
-        citation.setCitedResponsibleParties(singleton(r));
+        citation.setCitedResponsibleParties(Set.of(r));
         final String xml = marshal(citation, VERSION_2007);
         assertXmlEquals("<gmd:CI_Citation xmlns:gco=\"" + LegacyNamespaces.GCO + '"' +
                                         " xmlns:gmd=\"" + LegacyNamespaces.GMD + "\">\n" +
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
index 58012543f8..1e41e1df9b 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.metadata.iso.constraint;
 
+import java.util.Set;
 import javax.xml.bind.JAXBException;
 import org.opengis.metadata.constraint.Restriction;
 import org.apache.sis.xml.Namespaces;
@@ -23,7 +24,6 @@ import org.apache.sis.internal.xml.LegacyNamespaces;
 import org.apache.sis.test.xml.TestCase;
 import org.junit.Test;
 
-import static java.util.Collections.singleton;
 import static org.apache.sis.test.MetadataAssert.*;
 import static org.apache.sis.test.TestUtilities.getSingleton;
 import static org.apache.sis.internal.metadata.ImplementationHelper.ISO_NAMESPACE;
@@ -85,7 +85,7 @@ public final strictfp class DefaultLegalConstraintsTest extends TestCase {
                 "</mco:MD_LegalConstraints>\n";
 
         final DefaultLegalConstraints c = new DefaultLegalConstraints();
-        c.setUseConstraints(singleton(Restriction.LICENCE));
+        c.setUseConstraints(Set.of(Restriction.LICENCE));
         assertXmlEquals(xml, marshal(c), "xmlns:*");
         DefaultLegalConstraints actual = unmarshal(DefaultLegalConstraints.class, xml);
         assertSame(Restriction.LICENCE, getSingleton(actual.getUseConstraints()));
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java
index 8a19f7cb35..837a38126a 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.metadata.iso.extent;
 
-import java.util.Arrays;
+import java.util.List;
 import javax.xml.bind.JAXBException;
 import org.opengis.metadata.extent.Extent;
 import org.apache.sis.util.Version;
@@ -74,7 +74,7 @@ public final strictfp class DefaultExtentTest extends TestUsingFile {
          * intersection. That bounding box should be omitted.
          */
         bounds2.setBounds(8, 12, 33, 35);
-        e1.setGeographicElements(Arrays.asList(bounds1, bounds2));
+        e1.setGeographicElements(List.of(bounds1, bounds2));
         e2.setDescription(new SimpleInternationalString("Somewhere else"));
         e1.intersect(e2);
         assertTrue("isNil(description)", e1.getDescription() instanceof NilObject);
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractElementTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractElementTest.java
index f06163f89c..ecbd7e250c 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractElementTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/AbstractElementTest.java
@@ -18,7 +18,7 @@ package org.apache.sis.metadata.iso.quality;
 
 import java.time.Instant;
 import java.util.Date;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Iterator;
 import java.util.Collection;
 import org.apache.sis.test.TestCase;
@@ -44,7 +44,7 @@ public final strictfp class AbstractElementTest extends TestCase {
         final Instant   startTime = Instant.parse("2009-05-08T14:10:00Z");
         final Instant     endTime = Instant.parse("2009-05-12T21:45:00Z");
         final DefaultEvaluationMethod method = new DefaultEvaluationMethod();
-        method.setDates(Arrays.asList(startTime, endTime));
+        method.setDates(List.of(startTime, endTime));
         final AbstractElement element = new AbstractElement();
         element.setEvaluationMethod(method);
 
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistencyTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistencyTest.java
index 0ad12c0936..20a3c850cb 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistencyTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/quality/DefaultDomainConsistencyTest.java
@@ -17,7 +17,8 @@
 package org.apache.sis.metadata.iso.quality;
 
 import java.util.Map;
-import java.util.Collections;
+import java.util.List;
+import java.util.Set;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
@@ -41,7 +42,7 @@ public final strictfp class DefaultDomainConsistencyTest extends TestCase {
         final DefaultDescriptiveResult r = new DefaultDescriptiveResult("A result");
         final DefaultDomainConsistency c = new DefaultDomainConsistency();
         final Map<String,Object> m = c.asMap();
-        c.setResults(Collections.singleton(r));
-        assertEquals(Collections.singletonList(r), m.get("result"));
+        c.setResults(Set.of(r));
+        assertEquals(List.of(r), m.get("result"));
     }
 }
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
index 494b9e99d1..9429c08c41 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
@@ -16,9 +16,7 @@
  */
 package org.apache.sis.metadata.sql;
 
-import java.util.Arrays;
 import java.util.Set;
-import java.util.HashSet;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.Identifier;
 import org.opengis.metadata.citation.Party;
@@ -48,7 +46,7 @@ public final strictfp class MetadataFallbackVerifier {
     /**
      * Identifier for which {@link MetadataFallback} does not provide hard-coded values.
      */
-    private static final Set<String> EXCLUDES = new HashSet<>(Arrays.asList("NetCDF", "GeoTIFF", "ArcGIS", "MapInfo"));
+    private static final Set<String> EXCLUDES = Set.of("NetCDF", "GeoTIFF", "ArcGIS", "MapInfo");
 
     /**
      * Creates a temporary database for comparing {@link MetadataFallback} content with database content.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
index 23bf003cea..69fc072aff 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.metadata.sql;
 
-import java.util.Collections;
+import java.util.Set;
 import org.opengis.metadata.citation.Contact;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.citation.PresentationForm;
@@ -208,7 +208,7 @@ public final strictfp class MetadataWriterTest extends TestCase {
     @SuppressWarnings("deprecation")
     private void readWriteDeprecated() throws MetadataStoreException {
         final DefaultTelephone tel = new DefaultTelephone();
-        tel.setVoices(Collections.singleton("01.02.03.04"));
+        tel.setVoices(Set.of("01.02.03.04"));
         assertEquals("01.02.03.04", source.add(tel));
 
         final Telephone check = source.lookup(Telephone.class, "01.02.03.04");
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java b/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
index 634f1e2efb..3303ddb1cf 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
@@ -17,6 +17,7 @@
 package org.apache.sis.test.mock;
 
 import java.util.Map;
+import java.util.Set;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Locale;
@@ -86,7 +87,7 @@ public final strictfp class MetadataMock extends SimpleMetadata {
     @Override
     @Deprecated
     public Collection<Locale> getLanguages() {
-        return (language != null) ? Collections.singleton(language) : Collections.emptySet();
+        return (language != null) ? Set.of(language) : Set.of();
     }
 
     /**
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
index f1e1c34ba5..02ffd7b3bd 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
@@ -20,7 +20,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.HashMap;
 import java.util.Collection;
-import java.util.Collections;
 import java.io.IOException;
 import java.lang.reflect.Type;
 import java.lang.reflect.Field;
@@ -79,44 +78,32 @@ final strictfp class PackageVerifier {
      * we had to keep the namespace declared in {@link org.apache.sis.util.iso.DefaultScopedName}
      * (the replacement is performed by {@code org.apache.sis.xml.TransformingWriter}).</p>
      */
-    private static final Map<String, Set<String>> LEGACY_NAMESPACES;
-    static {
-        final Map<String, Set<String>> m = new HashMap<>(8);
-        m.put(LegacyNamespaces.GMD, ALL);
-        m.put(LegacyNamespaces.GMI, ALL);
-        m.put(LegacyNamespaces.GMX, ALL);
-        m.put(LegacyNamespaces.SRV, ALL);
-        m.put(Namespaces.GCO, Collections.singleton("ScopedName"));     // Not to be confused with standard <srv:scopedName>
-        LEGACY_NAMESPACES = Collections.unmodifiableMap(m);
-    }
+    private static final Map<String, Set<String>> LEGACY_NAMESPACES = Map.of(
+            LegacyNamespaces.GMD, ALL,
+            LegacyNamespaces.GMI, ALL,
+            LegacyNamespaces.GMX, ALL,
+            LegacyNamespaces.SRV, ALL,
+            Namespaces.GCO, Set.of("ScopedName"));     // Not to be confused with standard <srv:scopedName>
 
     /**
      * Types declared in JAXB annotations to be considered as equivalent to types in XML schemas.
      */
-    private static final Map<String,String> TYPE_EQUIVALENCES;
-    static {
-        final Map<String,String> m = new HashMap<>();
-        m.put("PT_FreeText",             "CharacterString");
-        m.put("Abstract_Citation",       "CI_Citation");
-        m.put("AbstractCI_Party",        "CI_Party");
-        m.put("Abstract_Responsibility", "CI_Responsibility");
-        m.put("Abstract_Extent",         "EX_Extent");
-        TYPE_EQUIVALENCES = Collections.unmodifiableMap(m);
-    }
+    private static final Map<String,String> TYPE_EQUIVALENCES = Map.of(
+            "PT_FreeText",             "CharacterString",
+            "Abstract_Citation",       "CI_Citation",
+            "AbstractCI_Party",        "CI_Party",
+            "Abstract_Responsibility", "CI_Responsibility",
+            "Abstract_Extent",         "EX_Extent");
 
     /**
      * XML elements that are not yet in the XML schema used by this verifier.
      * They are XML elements added by corrigendum applied on abstract models,
      * but not yet (at the time of writing this test) propagated in the XML schema.
      */
-    private static final Map<Class<?>, String> PENDING_XML_ELEMENTS;
-    static {
-        final Map<Class<?>,String> m = new HashMap<>();
-        m.put(org.apache.sis.metadata.iso.citation.AbstractParty.class, "partyIdentifier");
-        m.put(org.apache.sis.metadata.iso.content.DefaultSampleDimension.class, "rangeElementDescription");
-        m.put(org.apache.sis.metadata.iso.spatial.AbstractSpatialRepresentation.class, "scope");
-        PENDING_XML_ELEMENTS = Collections.unmodifiableMap(m);
-    }
+    private static final Map<Class<?>, String> PENDING_XML_ELEMENTS = Map.of(
+            org.apache.sis.metadata.iso.citation.AbstractParty.class, "partyIdentifier",
+            org.apache.sis.metadata.iso.content.DefaultSampleDimension.class, "rangeElementDescription",
+            org.apache.sis.metadata.iso.spatial.AbstractSpatialRepresentation.class, "scope");
 
     /**
      * The schemas to compare with the JAXB annotations.
@@ -265,7 +252,7 @@ final strictfp class PackageVerifier {
         classNS           = null;
         currentClass      = type;
         isDeprecatedClass = false;
-        properties        = Collections.emptyMap();
+        properties        = Map.of();
 
         final XmlType        xmlType = type.getDeclaredAnnotation(XmlType.class);
         final XmlRootElement xmlRoot = type.getDeclaredAnnotation(XmlRootElement.class);
@@ -434,7 +421,7 @@ final strictfp class PackageVerifier {
          * We do not verify fully the properties in legacy namespaces because we didn't loaded their schemas.
          * However, we verify at least that those properties are not declared as required.
          */
-        if (LEGACY_NAMESPACES.getOrDefault(ns, Collections.emptySet()).contains(name)) {
+        if (LEGACY_NAMESPACES.getOrDefault(ns, Set.of()).contains(name)) {
             if (!isDeprecatedClass && element.required()) {
                 throw new SchemaException(errorInClassMember(javaName)
                         .append("Legacy property should not be required.").toString());
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultScopedNameTest.java b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultScopedNameTest.java
index 42cc7a837e..def9030431 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultScopedNameTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultScopedNameTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.util.iso;
 
+import java.util.List;
 import java.util.Arrays;
 import org.opengis.util.GenericName;
 import org.apache.sis.util.SimpleInternationalString;
@@ -69,9 +70,9 @@ public final strictfp class DefaultScopedNameTest extends TestCase {
      */
     @Test
     public void testSimpleInternationalString() {
-        GenericName n1 = new DefaultScopedName(null, Arrays.asList("ns1", "Route"));
-        GenericName n2 = new DefaultScopedName(null, Arrays.asList(new SimpleInternationalString("ns1"), "Route"));
-        GenericName n3 = new DefaultScopedName(null, Arrays.asList("ns1", new SimpleInternationalString("Route")));
+        GenericName n1 = new DefaultScopedName(null, List.of("ns1", "Route"));
+        GenericName n2 = new DefaultScopedName(null, List.of(new SimpleInternationalString("ns1"), "Route"));
+        GenericName n3 = new DefaultScopedName(null, List.of("ns1", new SimpleInternationalString("Route")));
         assertNameEqual(n1, n2);
         assertNameEqual(n1, n3);
         assertNameEqual(n2, n3);
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
index 107ef0978f..7544a747df 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/TypesTest.java
@@ -17,6 +17,7 @@
 package org.apache.sis.util.iso;
 
 import java.util.Map;
+import java.util.List;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.TreeMap;
@@ -257,7 +258,7 @@ public final strictfp class TypesTest extends TestCase {
     @Test
     public void testGetCodeValues() {
         final OnLineFunction[] actual = Types.getCodeValues(OnLineFunction.class);
-        assertTrue(Arrays.asList(actual).containsAll(Arrays.asList(
+        assertTrue(Arrays.asList(actual).containsAll(List.of(
                 OnLineFunction.INFORMATION, OnLineFunction.SEARCH, OnLineFunction.ORDER,
                 OnLineFunction.DOWNLOAD, OnLineFunction.OFFLINE_ACCESS)));
     }
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java b/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
index bbc605559b..ad6ca6bf1e 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
@@ -25,9 +25,6 @@ import java.nio.file.Files;
 import java.nio.file.DirectoryStream;
 import java.nio.file.DirectoryIteratorException;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Collections;
 import java.lang.reflect.Method;
 import javax.xml.bind.annotation.XmlSchema;
 import javax.xml.bind.annotation.XmlElement;
@@ -79,8 +76,10 @@ public final class RenameListGenerator {
     /**
      * Properties in those namespaces do not have older namespaces to map from.
      */
-    private static final Set<String> LEGACY_NAMESPACES = Collections.unmodifiableSet(new HashSet<>(
-            Arrays.asList(LegacyNamespaces.GMD, LegacyNamespaces.GMI, LegacyNamespaces.SRV)));
+    private static final Set<String> LEGACY_NAMESPACES = Set.of(
+            LegacyNamespaces.GMD,
+            LegacyNamespaces.GMI,
+            LegacyNamespaces.SRV);
 
     /**
      * The {@value} string used in JAXB annotations for default names or namespaces.
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/xml/TransformingNamespacesTest.java b/core/sis-metadata/src/test/java/org/apache/sis/xml/TransformingNamespacesTest.java
index d433dab052..15bfff9f42 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/xml/TransformingNamespacesTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/xml/TransformingNamespacesTest.java
@@ -16,12 +16,11 @@
  */
 package org.apache.sis.xml;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Collection;
-import java.util.Collections;
 import javax.xml.namespace.NamespaceContext;
 import org.apache.sis.internal.xml.LegacyNamespaces;
 import org.apache.sis.test.TestCase;
@@ -43,7 +42,7 @@ public final strictfp class TransformingNamespacesTest extends TestCase implemen
      * All prefixes declared in this test.
      */
     private static Collection<String> prefixes() {
-        return Arrays.asList("mdq", "ns1", "ns2", "cit", "mdb", "gex");
+        return List.of("mdq", "ns1", "ns2", "cit", "mdb", "gex");
     }
 
     /**
@@ -74,12 +73,12 @@ public final strictfp class TransformingNamespacesTest extends TestCase implemen
         switch (namespaceURI) {
             case Namespaces.MDQ: {
                 // Arbitrarily return more than one prefix for that namespace.
-                prefixes = Arrays.asList("mdq", "ns1", "ns2");
+                prefixes = List.of("mdq", "ns1", "ns2");
                 break;
             }
             default: {
                 final String p = getPrefix(namespaceURI);
-                prefixes = (p != null) ? Collections.singleton(p) : Collections.emptySet();
+                prefixes = (p != null) ? Set.of(p) : Set.of();
                 break;
             }
         }
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/xml/XLinkMarshallingTest.java b/core/sis-metadata/src/test/java/org/apache/sis/xml/XLinkMarshallingTest.java
index 8398ecb624..4faf343014 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/xml/XLinkMarshallingTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/xml/XLinkMarshallingTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.xml;
 
-import java.util.Collections;
+import java.util.Set;
 import java.net.URI;
 import java.net.URISyntaxException;
 import javax.xml.bind.JAXBException;
@@ -103,7 +103,7 @@ public final strictfp class XLinkMarshallingTest extends TestCase {
         final DefaultDataIdentification identification = new DefaultDataIdentification();
         identification.getIdentifierMap().putSpecialized(IdentifierSpace.XLINK, xlink);
         final DefaultMetadata metadata = new DefaultMetadata();
-        metadata.setIdentificationInfo(Collections.singleton(identification));
+        metadata.setIdentificationInfo(Set.of(identification));
 
         assertXmlEquals(LINK_ONLY_XML, marshal(metadata), "xmlns:*");
         verify(true, unmarshal(DefaultMetadata.class, LINK_ONLY_XML));
@@ -136,7 +136,7 @@ public final strictfp class XLinkMarshallingTest extends TestCase {
         identification.getIdentifierMap().putSpecialized(IdentifierSpace.XLINK, xlink);
         identification.setAbstract(new SimpleInternationalString("This is a test."));
         final DefaultMetadata metadata = new DefaultMetadata();
-        metadata.setIdentificationInfo(Collections.singleton(identification));
+        metadata.setIdentificationInfo(Set.of(identification));
 
         assertXmlEquals(LINK_WITH_ELEMENT_XML, marshal(metadata), "xmlns:*");
         final DefaultMetadata unmarshal = unmarshal(DefaultMetadata.class, LINK_WITH_ELEMENT_XML);
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ListChangeEvent.java b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ListChangeEvent.java
index 7853b63d0d..73019d6a06 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ListChangeEvent.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ListChangeEvent.java
@@ -17,9 +17,6 @@
 package org.apache.sis.internal.map;
 
 import java.beans.PropertyChangeEvent;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import org.apache.sis.measure.NumberRange;
 
@@ -46,7 +43,7 @@ public final class ListChangeEvent<T> extends PropertyChangeEvent {
         super(source, propertyName, originalList, originalList);
         this.range = range;
         this.type = type;
-        this.items = (items != null) ? Collections.unmodifiableList(new ArrayList<>(items)) : null;
+        this.items = (items != null) ? List.copyOf(items) : null;
     }
 
     /**
@@ -77,7 +74,7 @@ public final class ListChangeEvent<T> extends PropertyChangeEvent {
     }
 
     public static <T> ListChangeEvent<T> added(Object source, String propertyName, List<T> originalList, T newItem, final int index) {
-        return added(source, propertyName, originalList, Arrays.asList(newItem),
+        return added(source, propertyName, originalList, List.of(newItem),
                 NumberRange.create(index, true, index, true));
     }
 
@@ -86,7 +83,7 @@ public final class ListChangeEvent<T> extends PropertyChangeEvent {
     }
 
     public static <T> ListChangeEvent<T> removed(Object source, String propertyName, List<T> originalList, T newItem, final int index) {
-        return removed(source, propertyName, originalList, Arrays.asList(newItem),
+        return removed(source, propertyName, originalList, List.of(newItem),
                 NumberRange.create(index, true, index, true));
     }
 
diff --git a/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/SEPortrayerTest.java b/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/SEPortrayerTest.java
index a9469550d4..a2a71cb11f 100644
--- a/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/SEPortrayerTest.java
+++ b/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/SEPortrayerTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.internal.map;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -122,7 +121,7 @@ public class SEPortrayerTest extends TestCase {
         shark1.setPropertyValue("specie", "White Shark");
         shark1.setPropertyValue("length", 12.0);
 
-        fishes = new MemoryFeatureSet(null, sharkType, Arrays.asList(fish1, fish2, shark1));
+        fishes = new MemoryFeatureSet(null, sharkType, List.of(fish1, fish2, shark1));
 
         final FeatureTypeBuilder boatbuilder = new FeatureTypeBuilder();
         boatbuilder.setName("boat");
@@ -147,7 +146,7 @@ public class SEPortrayerTest extends TestCase {
         boat2.setPropertyValue("geom", poly2);
         boat2.setPropertyValue("description", "A submarine");
 
-        boats = new MemoryFeatureSet(null, boatType, Arrays.asList(boat1, boat2));
+        boats = new MemoryFeatureSet(null, boatType, List.of(boat1, boat2));
     }
 
     private Set<Match> present(MapItem item) {
@@ -525,7 +524,7 @@ public class SEPortrayerTest extends TestCase {
         style.featureTypeStyles().add(fts);
         fts.rules().add(ruleBase);
 
-        final List<Resource> list = Arrays.asList(fishes, boats);
+        final List<Resource> list = List.of(fishes, boats);
         final Aggregate agg = new Aggregate() {
             @Override
             public Collection<? extends Resource> components() throws DataStoreException {
diff --git a/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoaderTest.java b/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoaderTest.java
index 85c380d99a..d36e115cd8 100644
--- a/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoaderTest.java
+++ b/core/sis-portrayal/src/test/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoaderTest.java
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.map.coverage;
 
 import java.util.List;
-import java.util.Arrays;
 import java.util.Collections;
 import java.awt.image.RenderedImage;
 import org.opengis.geometry.DirectPosition;
@@ -110,10 +109,9 @@ public final strictfp class MultiResolutionCoverageLoaderTest extends TestCase {
 
         /** Returns the preferred resolutions in units of CRS axes. */
         @Override public List<double[]> getResolutions() {
-            return Arrays.asList(
-                    new double[] {2, 3, 1},
-                    new double[] {4, 4, 3},
-                    new double[] {8, 9, 5});
+            return List.of(new double[] {2, 3, 1},
+                           new double[] {4, 4, 3},
+                           new double[] {8, 9, 5});
         }
 
         /** Returns a grid geometry with the resolution of finest level. */
diff --git a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/GazetteerFactory.java b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/GazetteerFactory.java
index ed3bcf8952..6cc1b70942 100644
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/GazetteerFactory.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/GazetteerFactory.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.referencing.gazetteer;
 
+import java.util.List;
 import java.util.Set;
-import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.Optional;
 import org.apache.sis.internal.util.Constants;
@@ -58,7 +58,7 @@ public class GazetteerFactory extends AbstractFactory {
          * In current implementation of `sis-javafx` module, the order in this set determines the order
          * of menu items. So we want a "nice" order and a `Set` implementation that preserve it.
          */
-        return new LinkedHashSet<>(Arrays.asList(
+        return new LinkedHashSet<>(List.of(
                 MilitaryGridReferenceSystem.IDENTIFIER,
                 GeohashReferenceSystem.IDENTIFIER));
     }
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
index 9d3672590d..79bbb736f6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.internal.referencing;
 
+import java.util.Set;
 import java.util.Collection;
-import java.util.Collections;
 import java.io.ObjectStreamException;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.measure.quantity.Length;
@@ -124,7 +124,7 @@ public final class PositionalAccuracyConstant extends DefaultAbsoluteExternalPos
             final InternationalString evaluationMethodDescription, final boolean pass)
     {
         DefaultConformanceResult result = new DefaultConformanceResult(Citations.SIS, evaluationMethodDescription, pass);
-        setResults(Collections.singleton(result));
+        setResults(Set.of(result));
         setMeasureDescription(measureDescription);
         setEvaluationMethodDescription(evaluationMethodDescription);
         setEvaluationMethodType(EvaluationMethodType.DIRECT_INTERNAL);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/CommonAuthorityFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
index 86c9907966..eb8d8905ab 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
@@ -18,10 +18,10 @@ package org.apache.sis.referencing.factory;
 
 import java.util.Map;
 import java.util.Set;
+import java.util.List;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Collections;
-import java.util.Arrays;
 import javax.measure.Unit;
 import javax.measure.quantity.Length;
 import org.opengis.util.FactoryException;
@@ -230,7 +230,7 @@ public class CommonAuthorityFactory extends GeodeticAuthorityFactory implements
      * @see #getCodeSpaces()
      */
     private static final Set<String> CODESPACES = Collections.unmodifiableSet(
-            new LinkedHashSet<>(Arrays.asList(Constants.OGC, Constants.CRS, "AUTO", AUTO2)));
+            new LinkedHashSet<>(List.of(Constants.OGC, Constants.CRS, "AUTO", AUTO2)));
 
     /**
      * First code in the AUTO(2) namespace.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
index b19617cede..f75879798e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
@@ -436,7 +436,7 @@ public class EPSGDataAccess extends GeodeticAuthorityFactory implements CRSAutho
          * We do not cache this citation because the caching service is already provided by ConcurrentAuthorityFactory.
          */
         final DefaultCitation c = new DefaultCitation("EPSG Geodetic Parameter Dataset");
-        c.setIdentifiers(Collections.singleton(new ImmutableIdentifier(null, null, Constants.EPSG)));
+        c.setIdentifiers(Set.of(new ImmutableIdentifier(null, null, Constants.EPSG)));
         try {
             /*
              * Get the most recent version number from the history table. We get the date in local timezone
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java
index b449b336e4..3140648a46 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java
@@ -94,7 +94,7 @@ public class EPSGFactory extends ConcurrentAuthorityFactory<EPSGDataAccess> impl
      *
      * @see #getCodeSpaces()
      */
-    private static final Set<String> CODESPACES = Collections.singleton(Constants.EPSG);
+    private static final Set<String> CODESPACES = Set.of(Constants.EPSG);
 
     /**
      * The factory to use for creating {@link Connection}s to the EPSG database.
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java b/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
index fc998b39b5..2c7b8ab36e 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.jaxb.referencing;
 
-import java.util.Collections;
+import java.util.Set;
 import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.metadata.Identifier;
 import org.apache.sis.internal.util.Constants;
@@ -95,7 +95,7 @@ public final strictfp class CodeTest extends TestCase {
     @DependsOnMethod("testWithVersion")
     public void testForIdentifiedObject() {
         final Identifier id = new ImmutableIdentifier(Citations.EPSG, "EPSG", "4326", "8.2", null);
-        final Code value = Code.forIdentifiedObject(GeographicCRS.class, Collections.singleton(id));
+        final Code value = Code.forIdentifiedObject(GeographicCRS.class, Set.of(id));
         assertNotNull(value);
         assertEquals("codeSpace", Constants.IOGP, value.codeSpace);
         assertEquals("code", "urn:ogc:def:crs:EPSG:8.2:4326", value.code);
@@ -112,7 +112,7 @@ public final strictfp class CodeTest extends TestCase {
         authority.getIdentifiers().add(new ImmutableIdentifier(null, "OGP", "EPSG"));
 
         final Identifier id = new ImmutableIdentifier(authority, "EPSG", "4326", "8.2", null);
-        final Code value = Code.forIdentifiedObject(GeographicCRS.class, Collections.singleton(id));
+        final Code value = Code.forIdentifiedObject(GeographicCRS.class, Set.of(id));
         assertNotNull(value);
         assertEquals("codeSpace", "OGP", value.codeSpace);
         assertEquals("code", "urn:ogc:def:crs:EPSG:8.2:4326", value.code);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTDictionaryTest.java b/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTDictionaryTest.java
index c03afa29f5..fb4a133f89 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTDictionaryTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTDictionaryTest.java
@@ -18,7 +18,7 @@ package org.apache.sis.io.wkt;
 
 import java.util.Set;
 import java.util.Map;
-import java.util.Arrays;
+import java.util.List;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.function.Consumer;
@@ -64,7 +64,7 @@ public final strictfp class WKTDictionaryTest extends TestCase {
     @Test
     public void testAddDefinitions() throws FactoryException {
         final WKTDictionary factory = new WKTDictionary(null);
-        factory.addDefinitions(Arrays.asList(
+        factory.addDefinitions(List.of(
                 "GeodCRS[\"Anguilla 1957\",\n" +
                 " Datum[\"Anguilla 1957\",\n" +
                 "  Ellipsoid[\"Clarke 1880\", 6378249.145, 293.465]],\n" +
@@ -90,7 +90,7 @@ public final strictfp class WKTDictionaryTest extends TestCase {
         assertSame( codes,  factory.getAuthorityCodes(GeodeticCRS.class));
         assertSame( codes,  factory.getAuthorityCodes(GeographicCRS.class));
         assertEquals(0, factory.getAuthorityCodes(ProjectedCRS.class).size());
-        assertSetEquals(Arrays.asList("21", "E1"), codes);
+        assertSetEquals(List.of("21", "E1"), codes);
         /*
          * Tests CRS creation, potentially with expected error.
          */
@@ -138,10 +138,10 @@ public final strictfp class WKTDictionaryTest extends TestCase {
         Set<String> codes = factory.getAuthorityCodes(IdentifiedObject.class);
         assertSame( codes,  factory.getAuthorityCodes(IdentifiedObject.class));     // Test caching.
         assertSame( codes,  factory.getAuthorityCodes(SingleCRS.class));            // Test sharing.
-        assertSetEquals(Arrays.asList("102018", "ESRI::102021", "TEST::102021", "TEST:v2:102021", "E1", "E2"), codes);
-        assertSetEquals(Arrays.asList("102018", "ESRI::102021"), factory.getAuthorityCodes(ProjectedCRS.class));
+        assertSetEquals(List.of("102018", "ESRI::102021", "TEST::102021", "TEST:v2:102021", "E1", "E2"), codes);
+        assertSetEquals(List.of("102018", "ESRI::102021"), factory.getAuthorityCodes(ProjectedCRS.class));
         codes = factory.getAuthorityCodes(GeographicCRS.class);
-        assertSetEquals(Arrays.asList("TEST::102021", "TEST:v2:102021", "E1", "E2"), codes);
+        assertSetEquals(List.of("TEST::102021", "TEST:v2:102021", "E1", "E2"), codes);
         assertSame(codes, factory.getAuthorityCodes(GeodeticCRS.class));            // Test sharing.
         assertSame(codes, factory.getAuthorityCodes(GeographicCRS.class));          // Test caching.
         /*
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
index eb5fa53043..45dbe11c7e 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
@@ -153,7 +153,7 @@ public final strictfp class AbstractIdentifiedObjectTest extends TestCase {
     @DependsOnMethod("testWithoutIdentifier")
     public void testWithSingleIdentifier() {
         final Identifier               identifier  = new ImmutableIdentifier(null, "EPSG", "7019");
-        final Set<Identifier>          identifiers = Collections.singleton(identifier);
+        final Set<Identifier>          identifiers = Set.of(identifier);
         final AbstractIdentifiedObject object      = new AbstractIdentifiedObject(properties(identifiers));
         final Identifier               gmlId       = validate(object, identifiers, "epsg-7019");
         assertNotNull("gmlId",                   gmlId);
@@ -188,7 +188,7 @@ public final strictfp class AbstractIdentifiedObjectTest extends TestCase {
     @DependsOnMethod("testWithManyIdentifiers")
     public void testAsSubtype() {
         final Identifier               identifier  = new NamedIdentifier(EPSG, "7019");
-        final Set<Identifier>          identifiers = Collections.singleton(identifier);
+        final Set<Identifier>          identifiers = Set.of(identifier);
         final AbstractIdentifiedObject object      = new AbstractDatum(properties(identifiers));
         final Identifier               gmlId       = validate(object, identifiers, "epsg-datum-7019");
         assertNotNull("gmlId",                   gmlId);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/EPSGFactoryFallbackTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/EPSGFactoryFallbackTest.java
index 28dd9b12f1..4b5bc78b52 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/EPSGFactoryFallbackTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/EPSGFactoryFallbackTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.referencing;
 
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 import org.opengis.util.FactoryException;
 import org.opengis.referencing.crs.SingleCRS;
@@ -68,30 +68,30 @@ public final strictfp class EPSGFactoryFallbackTest extends TestCase {
      */
     @Test
     public void testGetAuthorityCodes() throws FactoryException {
-        assertSetEquals(Arrays.asList(StandardDefinitions.GREENWICH),
+        assertSetEquals(List.of(StandardDefinitions.GREENWICH),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(PrimeMeridian.class));
-        assertSetEquals(Arrays.asList("7030", "7043", "7019", "7008", "7022", "7048"),
+        assertSetEquals(List.of("7030", "7043", "7019", "7008", "7022", "7048"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(Ellipsoid.class));
-        assertSetEquals(Arrays.asList("6326", "6322", "6269", "6267", "6258", "6230", "6019", "6047", "5100", "5103"),
+        assertSetEquals(List.of("6326", "6322", "6269", "6267", "6258", "6230", "6019", "6047", "5100", "5103"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(Datum.class));
-        assertSetEquals(Arrays.asList("6422", "6423"),
+        assertSetEquals(List.of("6422", "6423"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(EllipsoidalCS.class));
-        assertSetEquals(Arrays.asList("6404"),
+        assertSetEquals(List.of("6404"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(SphericalCS.class));
-        assertSetEquals(Arrays.asList("6500", "4400", "1026", "1027"),
+        assertSetEquals(List.of("6500", "4400", "1026", "1027"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(CartesianCS.class));
-        assertSetEquals(Arrays.asList("4978", "4984", "4936"),
+        assertSetEquals(List.of("4978", "4984", "4936"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(GeocentricCRS.class));
-        assertSetEquals(Arrays.asList("4326", "4322", "4019", "4047", "4269", "4267", "4258", "4230", "4979", "4985", "4937"),
+        assertSetEquals(List.of("4326", "4322", "4019", "4047", "4269", "4267", "4258", "4230", "4979", "4985", "4937"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(GeographicCRS.class));
-        assertSetEquals(Arrays.asList("5714", "5715", "5703"),
+        assertSetEquals(List.of("5714", "5715", "5703"),
                 EPSGFactoryFallback.INSTANCE.getAuthorityCodes(VerticalCRS.class));
         /*
          * There is too many ProjectedCRS codes for enumerating all of them, so test only a sampling.
          */
         final Set<String> codes = EPSGFactoryFallback.INSTANCE.getAuthorityCodes(ProjectedCRS.class);
-        assertTrue(codes.containsAll(Arrays.asList("5041", "5042", "32601", "32660", "32701", "32760")));
-        assertTrue(Collections.disjoint(codes, Arrays.asList("7030", "6326", "4326", "4978", "32600", "32700", "5714")));
+        assertTrue(codes.containsAll(List.of("5041", "5042", "32601", "32660", "32701", "32760")));
+        assertTrue(Collections.disjoint(codes, List.of("7030", "6326", "4326", "4978", "32600", "32700", "5714")));
     }
 
     /**
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
index 4217d64240..6a27dbc03a 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.referencing.factory;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
 import java.util.HashSet;
 import java.awt.geom.AffineTransform;
@@ -84,19 +84,19 @@ public final strictfp class CommonAuthorityFactoryTest extends TestCase {
     public void testGetAuthorityCodes() throws FactoryException {
         assertTrue("getAuthorityCodes(Datum.class)",
                 factory.getAuthorityCodes(Datum.class).isEmpty());
-        assertSetEquals(Arrays.asList("CRS:1", "CRS:27", "CRS:83", "CRS:84", "CRS:88",
-                                      "AUTO2:42001", "AUTO2:42002", "AUTO2:42003", "AUTO2:42004", "AUTO2:42005",
-                                      "OGC:JulianDate", "OGC:TruncatedJulianDate", "OGC:UnixTime"),
+        assertSetEquals(List.of("CRS:1", "CRS:27", "CRS:83", "CRS:84", "CRS:88",
+                                "AUTO2:42001", "AUTO2:42002", "AUTO2:42003", "AUTO2:42004", "AUTO2:42005",
+                                "OGC:JulianDate", "OGC:TruncatedJulianDate", "OGC:UnixTime"),
                 factory.getAuthorityCodes(CoordinateReferenceSystem.class));
-        assertSetEquals(Arrays.asList("AUTO2:42001", "AUTO2:42002", "AUTO2:42003", "AUTO2:42004", "AUTO2:42005"),
+        assertSetEquals(List.of("AUTO2:42001", "AUTO2:42002", "AUTO2:42003", "AUTO2:42004", "AUTO2:42005"),
                 factory.getAuthorityCodes(ProjectedCRS.class));
-        assertSetEquals(Arrays.asList("CRS:27", "CRS:83", "CRS:84"),
+        assertSetEquals(List.of("CRS:27", "CRS:83", "CRS:84"),
                 factory.getAuthorityCodes(GeographicCRS.class));
-        assertSetEquals(Arrays.asList("CRS:88"),
+        assertSetEquals(List.of("CRS:88"),
                 factory.getAuthorityCodes(VerticalCRS.class));
-        assertSetEquals(Arrays.asList("OGC:JulianDate", "OGC:TruncatedJulianDate", "OGC:UnixTime"),
+        assertSetEquals(List.of("OGC:JulianDate", "OGC:TruncatedJulianDate", "OGC:UnixTime"),
                 factory.getAuthorityCodes(TemporalCRS.class));
-        assertSetEquals(Arrays.asList("CRS:1"),
+        assertSetEquals(List.of("CRS:1"),
                 factory.getAuthorityCodes(EngineeringCRS.class));
 
         final Set<String> codes = factory.getAuthorityCodes(GeographicCRS.class);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/MultiAuthoritiesFactoryTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/MultiAuthoritiesFactoryTest.java
index 9feaf3771f..805595a6d5 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/MultiAuthoritiesFactoryTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/MultiAuthoritiesFactoryTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.sis.referencing.factory;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import org.opengis.referencing.IdentifiedObject;
@@ -114,9 +112,9 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
         final AuthorityFactoryMock mock2 = new AuthorityFactoryMock("MOCK2", null);
         final AuthorityFactoryMock mock3 = new AuthorityFactoryMock("MOCK3", null);
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(
-                Arrays.asList(mock1, mock2), null,
-                Arrays.asList(mock1, mock3), null);
-        assertSetEquals(Arrays.asList("MOCK1", "MOCK2", "MOCK3"), factory.getCodeSpaces());
+                List.of(mock1, mock2), null,
+                List.of(mock1, mock3), null);
+        assertSetEquals(List.of("MOCK1", "MOCK2", "MOCK3"), factory.getCodeSpaces());
     }
 
     /**
@@ -130,8 +128,8 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
         final AuthorityFactoryMock mock2 = new AuthorityFactoryMock("MOCK2", "1.2");
         final AuthorityFactoryMock mock3 = new AuthorityFactoryMock("MOCK1", "2.3");
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(
-                Arrays.asList(mock1, mock2, mock3), null,
-                Arrays.asList(mock1, mock3), null);
+                List.of(mock1, mock2, mock3), null,
+                List.of(mock1, mock3), null);
 
         assertSame("MOCK2", mock2, factory.getAuthorityFactory(  CRSAuthorityFactory.class, "mock2", null));
         assertSame("MOCK1", mock1, factory.getAuthorityFactory(  CRSAuthorityFactory.class, "mock1", null));
@@ -171,7 +169,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
         final AuthorityFactoryMock mock4 = new AuthorityFactoryMock("MOCK3", null);
         final AuthorityFactoryMock mock5 = new AuthorityFactoryMock("MOCK5", null);
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(
-                Arrays.asList(mock1, mock2, mock3, mock4, mock5), null, null, null);
+                List.of(mock1, mock2, mock3, mock4, mock5), null, null, null);
 
         assertSame("MOCK1", mock1, factory.getAuthorityFactory(CRSAuthorityFactory.class, "mock1", null));
         assertSame("MOCK1", mock1, factory.getAuthorityFactory(CRSAuthorityFactory.class, "mock1", "2.3"));
@@ -200,7 +198,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testGetAuthorityFactory")
     public void testCreateFromSimpleCodes() throws FactoryException {
-        final Set<AuthorityFactoryMock> mock = Collections.singleton(new AuthorityFactoryMock("MOCK", "2.3"));
+        final Set<AuthorityFactoryMock> mock = Set.of(new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
 
         assertSame("Straight",      HardCodedCRS  .WGS84_LATITUDE_FIRST, factory.createGeographicCRS("MOCK:4326"));
@@ -230,7 +228,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testCreateFromSimpleCodes")
     public void testCreateFromURNs() throws FactoryException {
-        final Set<AuthorityFactoryMock> mock = Collections.singleton(new AuthorityFactoryMock("MOCK", "2.3"));
+        final Set<AuthorityFactoryMock> mock = Set.of(new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
 
         assertSame("Empty version", HardCodedCRS  .WGS84_LATITUDE_FIRST, factory.createGeographicCRS("urn:ogc:def:crs:MOCK::4326"));
@@ -259,7 +257,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testCreateFromURNs")
     public void testCreateFromHTTPs() throws FactoryException {
-        final Set<AuthorityFactoryMock> mock = Collections.singleton(new AuthorityFactoryMock("MOCK", "2.3"));
+        final Set<AuthorityFactoryMock> mock = Set.of(new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
 
         assertSame("HTTP",        HardCodedCRS.WGS84_LATITUDE_FIRST, factory.createGeographicCRS("http://www.opengis.net/def/crs/mock/0/4326"));
@@ -287,7 +285,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testCreateFromURNs")
     public void testCreateFromCombinedURNs() throws FactoryException {
-        final Set<AuthorityFactoryMock> mock = Collections.singleton(new AuthorityFactoryMock("MOCK", "2.3"));
+        final Set<AuthorityFactoryMock> mock = Set.of(new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
         testCreateFromCombinedURIs(factory, "urn:ogc:def:crs, crs:MOCK::4326, crs:MOCK::5714");
         /*
@@ -326,7 +324,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testCreateFromHTTPs")
     public void testCreateFromCombinedHTTPs() throws FactoryException {
-        final Set<AuthorityFactoryMock> mock = Collections.singleton(new AuthorityFactoryMock("MOCK", "2.3"));
+        final Set<AuthorityFactoryMock> mock = Set.of(new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
         testCreateFromCombinedURIs(factory, "http://www.opengis.net/def/crs-compound?"
                                         + "1=http://www.opengis.net/def/crs/MOCK/0/4326&"
@@ -366,7 +364,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
      */
     @Test
     public void testGetAuthorityCodes() throws FactoryException {
-        final List<AuthorityFactoryMock> mock = Arrays.asList(
+        final List<AuthorityFactoryMock> mock = List.of(
                 new AuthorityFactoryMock("MOCK", null),
                 new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, mock, mock, null);
@@ -389,7 +387,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
      */
     @Test
     public void testCreateFromCoordinateReferenceSystemCodes() throws FactoryException {
-        final List<AuthorityFactoryMock> mock = Arrays.asList(
+        final List<AuthorityFactoryMock> mock = List.of(
                 new AuthorityFactoryMock("MOCK", null),
                 new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, null, null, mock);
@@ -413,7 +411,7 @@ public final strictfp class MultiAuthoritiesFactoryTest extends TestCase {
      */
     @Test
     public void testNewIdentifiedObjectFinder() throws FactoryException {
-        final List<AuthorityFactoryMock> mock = Arrays.asList(
+        final List<AuthorityFactoryMock> mock = List.of(
                 new AuthorityFactoryMock("MOCK", null),
                 new AuthorityFactoryMock("MOCK", "2.3"));
         final MultiAuthoritiesFactory factory = new MultiAuthoritiesFactory(mock, null, mock, null);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java
index 8eccc24bf1..52c6d19d0a 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.referencing.operation;
 
+import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Arrays;
 import java.util.Collections;
 import java.text.ParseException;
 import org.opengis.util.FactoryException;
@@ -279,7 +279,7 @@ public final strictfp class CoordinateOperationFinderTest extends MathTransformT
         assertSame      ("targetCRS",  targetCRS,            operation.getTargetCRS());
         assertFalse     ("isIdentity",                       operation.getMathTransform().isIdentity());
         assertEquals    ("name",       "Datum shift",        operation.getName().getCode());
-        assertSetEquals (Arrays.asList(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
+        assertSetEquals (Set.of(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
         assertInstanceOf("operation",  Transformation.class, operation);
         assertEquals    ("method", method, ((SingleOperation) operation).getMethod().getName().getCode());
 
@@ -340,7 +340,7 @@ public final strictfp class CoordinateOperationFinderTest extends MathTransformT
         assertSame      ("targetCRS",  targetCRS,            operation.getTargetCRS());
         assertFalse     ("isIdentity",                       operation.getMathTransform().isIdentity());
         assertEquals    ("name",       "Datum shift",        operation.getName().getCode());
-        assertSetEquals (Arrays.asList(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
+        assertSetEquals (Set.of(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
         assertInstanceOf("operation",  Transformation.class, operation);
         assertEquals("method", "Geocentric translations (geog2D domain)",
                 ((SingleOperation) operation).getMethod().getName().getCode());
@@ -386,7 +386,7 @@ public final strictfp class CoordinateOperationFinderTest extends MathTransformT
         assertSame      ("targetCRS",  targetCRS,            operation.getTargetCRS());
         assertFalse     ("isIdentity",                       operation.getMathTransform().isIdentity());
         assertEquals    ("name",       "Datum shift",        operation.getName().getCode());
-        assertSetEquals (Arrays.asList(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
+        assertSetEquals (Set.of(DATUM_SHIFT_APPLIED), operation.getCoordinateOperationAccuracy());
         assertInstanceOf("operation", Transformation.class,  operation);
         assertEquals    ("method", "Geocentric translations (geocentric domain)",
                 ((SingleOperation) operation).getMethod().getName().getCode());
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformFactoryMock.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformFactoryMock.java
index 6ebf315421..8ca24534a1 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformFactoryMock.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformFactoryMock.java
@@ -17,7 +17,6 @@
 package org.apache.sis.referencing.operation.transform;
 
 import java.util.Set;
-import java.util.Collections;
 import org.opengis.util.FactoryException;
 import org.opengis.util.NoSuchIdentifierException;
 import org.opengis.metadata.citation.Citation;
@@ -64,7 +63,7 @@ public final strictfp class MathTransformFactoryMock implements MathTransformFac
      */
     @Override
     public Set<OperationMethod> getAvailableMethods(Class<? extends SingleOperation> type) {
-        return type.isInstance(method) ? Collections.singleton(method) : Collections.emptySet();
+        return type.isInstance(method) ? Set.of(method) : Set.of();
     }
 
     /**
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/OperationMethodSetTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/OperationMethodSetTest.java
index 2c4155416f..c90370d27e 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/OperationMethodSetTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/OperationMethodSetTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.referencing.operation.transform;
 
+import java.util.Set;
 import java.util.Map;
 import java.util.Iterator;
-import java.util.Collections;
 import java.util.NoSuchElementException;
 import org.opengis.parameter.ParameterDescriptorGroup;
 import org.opengis.referencing.operation.Projection;
@@ -58,13 +58,13 @@ public final strictfp class OperationMethodSetTest extends TestCase {
      */
     @SuppressWarnings("serial")
     private static DefaultOperationMethod createMethod(final Class<? extends Projection> type, final String method) {
-        Map<String,?> properties = Collections.singletonMap(DefaultOperationMethod.NAME_KEY, method);
+        Map<String,?> properties = Map.of(DefaultOperationMethod.NAME_KEY, method);
         final ParameterDescriptorGroup parameters = new DefaultParameterDescriptorGroup(properties, 1, 1);
         /*
          * Recycle the ParameterDescriptorGroup name for DefaultOperationMethod.
          * This save us one object creation, and is often the same name anyway.
          */
-        properties = Collections.singletonMap(DefaultOperationMethod.NAME_KEY, parameters.getName());
+        properties = Map.of(DefaultOperationMethod.NAME_KEY, parameters.getName());
         return new DefaultOperationMethod(properties, 2, 2, parameters) {
             @Override public Class<? extends Projection> getOperationType() {
                 return type;
@@ -151,8 +151,8 @@ public final strictfp class OperationMethodSetTest extends TestCase {
         /*
          * Lambert case. Test twice since the two excecutions will take different code paths.
          */
-        assertEquals(Collections.singleton(lamb), lambert);
-        assertEquals(Collections.singleton(lamb), lambert);
+        assertEquals(Set.of(lamb), lambert);
+        assertEquals(Set.of(lamb), lambert);
         /*
          * Test filtering: the test should not contain any conic projection.
          */
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
index ed8436a185..a620075e51 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.referencing.report;
 
-import java.util.Arrays;
 import java.util.Locale;
 import java.util.Set;
 import java.util.Map;
@@ -265,8 +264,8 @@ public final strictfp class CoordinateReferenceSystems extends AuthorityCodesRep
      * The datums from the above list which are deprecated, but that we do not want to replace by the non-deprecated
      * datum. We disable some replacements when they allow better sorting of deprecated CRS.
      */
-    private static final Set<String> KEEP_DEPRECATED_DATUM = new HashSet<>(Arrays.asList(
-        "Dealul Piscului 1970"));           // Datum does not exist but is an alias for S-42 in Romania.
+    private static final Set<String> KEEP_DEPRECATED_DATUM = Set.of(
+        "Dealul Piscului 1970");            // Datum does not exist but is an alias for S-42 in Romania.
 
     /**
      * Shortcut for {@link #SECTION_TITLES} initialization.
@@ -279,7 +278,7 @@ public final strictfp class CoordinateReferenceSystems extends AuthorityCodesRep
     /**
      * Words to ignore in a datum name in order to detect if a CRS name is the acronym of the datum name.
      */
-    private static final Set<String> DATUM_WORDS_TO_IGNORE = new HashSet<>(Arrays.asList(
+    private static final Set<String> DATUM_WORDS_TO_IGNORE = Set.of(
             "of",           // VIVD:   Virgin Islands Vertical Datum of 2009
             "de",           // RRAF:   Reseau de Reference des Antilles Francaises
             "des",          // RGAF:   Reseau Geodesique des Antilles Francaises
@@ -288,7 +287,7 @@ public final strictfp class CoordinateReferenceSystems extends AuthorityCodesRep
             "para",         // SIRGAS: Sistema de Referencia Geocentrico para America del Sur 1995
             "del",          // SIRGAS: Sistema de Referencia Geocentrico para America del Sur 1995
             "las",          // SIRGAS: Sistema de Referencia Geocentrico para las AmericaS 2000
-            "Tides"));      // MLWS:   Mean Low Water Spring Tides
+            "Tides");       // MLWS:   Mean Low Water Spring Tides
 
     /**
      * The keywords before which to cut the CRS names when sorting by alphabetical order.
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/ConsistencyTest.java b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/ConsistencyTest.java
index 5f5209fe9a..fe4c766c15 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/ConsistencyTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/ConsistencyTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.sis.test.integration;
 
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.Set;
 import java.text.ParseException;
 import javax.measure.Quantity;
@@ -72,15 +70,14 @@ public final strictfp class ConsistencyTest extends TestCase {
     /**
      * Codes to exclude for now.
      */
-    private static final Set<String> EXCLUDES = new HashSet<>(Arrays.asList(
+    private static final Set<String> EXCLUDES = Set.of(
         "CRS:1",            // Computer display: WKT parser alters the (i,j) axis names.
         "EPSG:5819",        // EPSG topocentric example A: DerivedCRS wrongly handled as a ProjectedCRS. See SIS-518.
         "AUTO2:42001",      // This projection requires parameters, but we provide none.
         "AUTO2:42002",      // This projection requires parameters, but we provide none.
         "AUTO2:42003",      // This projection requires parameters, but we provide none.
         "AUTO2:42004",      // This projection requires parameters, but we provide none.
-        "AUTO2:42005"       // This projection requires parameters, but we provide none.
-    ));
+        "AUTO2:42005");     // This projection requires parameters, but we provide none.
 
     /**
      * Width of the code columns in the warnings formatted by {@link #print(String, String, Object)}.
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
index 2fe622b05c..5538a1dfb0 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
@@ -18,8 +18,9 @@ package org.apache.sis.test.integration;
 
 import java.net.URI;
 import java.net.URL;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
 import java.io.StringWriter;
@@ -64,9 +65,6 @@ import org.apache.sis.xml.IdentifierSpace;
 import org.apache.sis.xml.NilReason;
 import org.apache.sis.xml.XML;
 
-import static java.util.Collections.singleton;
-import static java.util.Collections.singletonMap;
-
 // Test dependencies
 import org.apache.sis.test.LoggingWatcher;
 import org.apache.sis.test.TestUtilities;
@@ -125,9 +123,9 @@ public final strictfp class MetadataTest extends TestCase {
     private DefaultMetadata createHardCoded() {
         final DefaultMetadata metadata = new DefaultMetadata();
         metadata.setMetadataIdentifier(new DefaultIdentifier("test/Metadata.xml"));
-        metadata.setLocalesAndCharsets(singletonMap(Locale.ENGLISH, StandardCharsets.UTF_8));
-        metadata.setMetadataScopes(singleton(new DefaultMetadataScope(ScopeCode.DATASET, "Pseudo Common Data Index record")));
-        metadata.setDateInfo(singleton(new DefaultCitationDate(TestUtilities.date("2009-01-01 04:00:00"), DateType.CREATION)));
+        metadata.setLocalesAndCharsets(Map.of(Locale.ENGLISH, StandardCharsets.UTF_8));
+        metadata.setMetadataScopes(Set.of(new DefaultMetadataScope(ScopeCode.DATASET, "Pseudo Common Data Index record")));
+        metadata.setDateInfo(Set.of(new DefaultCitationDate(TestUtilities.date("2009-01-01 04:00:00"), DateType.CREATION)));
         /*
          * Contact information for the author. The same party will be used for custodian and distributor,
          * with only the role changed. Note that we need to create an instance of the deprecated class,
@@ -141,27 +139,27 @@ public final strictfp class MetadataTest extends TestCase {
             online.setProtocol("http");
             final DefaultContact contact = new DefaultContact(online);
             contact.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "IFREMER");
-            contact.setPhones(Arrays.asList(
+            contact.setPhones(List.of(
                     new DefaultTelephone("+33 (0)2 xx.xx.xx.x6", TelephoneType.VOICE),
                     new DefaultTelephone("+33 (0)2 xx.xx.xx.x4", TelephoneType.FACSIMILE)
             ));
             final DefaultAddress address = new DefaultAddress();
-            address.setDeliveryPoints(singleton(new SimpleInternationalString("Brest institute")));
+            address.setDeliveryPoints(Set.of(new SimpleInternationalString("Brest institute")));
             address.setCity(new SimpleInternationalString("Plouzane"));
             address.setPostalCode("29280");
             address.setCountry(country);
-            address.setElectronicMailAddresses(singleton("xx@xx.fr"));
-            contact.setAddresses(singleton(address));
-            author.setParties(singleton(new DefaultOrganisation("Some marine institute", null, null, contact)));
-            metadata.setContacts(singleton(author));
+            address.setElectronicMailAddresses(Set.of("xx@xx.fr"));
+            contact.setAddresses(Set.of(address));
+            author.setParties(Set.of(new DefaultOrganisation("Some marine institute", null, null, contact)));
+            metadata.setContacts(Set.of(author));
         }
         /*
          * Data indentification.
          */
         {
             final DefaultCitation citation = new DefaultCitation("Some set of points");
-            citation.setAlternateTitles(singleton(new SimpleInternationalString("Code XYZ")));
-            citation.setDates(Arrays.asList(
+            citation.setAlternateTitles(Set.of(new SimpleInternationalString("Code XYZ")));
+            citation.setDates(List.of(
                     new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION),
                     new DefaultCitationDate(TestUtilities.date("1979-08-02 22:00:00"), DateType.CREATION)));
             {
@@ -170,18 +168,18 @@ public final strictfp class MetadataTest extends TestCase {
                 final DefaultOnlineResource online = new DefaultOnlineResource(URI.create("http://www.com.univ-mrs.fr/LOB/"));
                 online.setProtocol("http");
                 final DefaultContact contact = new DefaultContact(online);
-                contact.setPhones(Arrays.asList(
+                contact.setPhones(List.of(
                         new DefaultTelephone("+33 (0)4 xx.xx.xx.x5", TelephoneType.VOICE),
                         new DefaultTelephone("+33 (0)4 xx.xx.xx.x8", TelephoneType.FACSIMILE)
                 ));
                 final DefaultAddress address = new DefaultAddress();
-                address.setDeliveryPoints(singleton(new SimpleInternationalString("Oceanology institute")));
+                address.setDeliveryPoints(Set.of(new SimpleInternationalString("Oceanology institute")));
                 address.setCity(new SimpleInternationalString("Marseille"));
                 address.setPostalCode("13288");
                 address.setCountry(country);
-                contact.setAddresses(singleton(address));
-                originator.setParties(singleton(new DefaultOrganisation("Oceanology laboratory", null, null, contact)));
-                citation.setCitedResponsibleParties(singleton(originator));
+                contact.setAddresses(Set.of(address));
+                originator.setParties(Set.of(new DefaultOrganisation("Oceanology laboratory", null, null, contact)));
+                citation.setCitedResponsibleParties(Set.of(originator));
             }
             final DefaultDataIdentification identification = new DefaultDataIdentification(
                     citation,                                                   // Citation
@@ -192,7 +190,7 @@ public final strictfp class MetadataTest extends TestCase {
                 @SuppressWarnings("deprecation")
                 final DefaultResponsibility custodian = new DefaultResponsibleParty(author);
                 custodian.setRole(Role.CUSTODIAN);
-                identification.setPointOfContacts(singleton(custodian));
+                identification.setPointOfContacts(Set.of(custodian));
             }
             /*
              * Data indentification / Keywords.
@@ -202,12 +200,12 @@ public final strictfp class MetadataTest extends TestCase {
                         new Anchor(URI.create("SDN:P021:35:ATTN"), "Transmittance and attenuance of the water column"));
                 keyword.setType(KeywordType.THEME);
                 final DefaultCitation thesaurus = new DefaultCitation("BODC Parameter Discovery Vocabulary");
-                thesaurus.setAlternateTitles(singleton(new SimpleInternationalString("P021")));
-                thesaurus.setDates(singleton(new DefaultCitationDate(TestUtilities.date("2008-11-25 23:00:00"), DateType.REVISION)));
+                thesaurus.setAlternateTitles(Set.of(new SimpleInternationalString("P021")));
+                thesaurus.setDates(Set.of(new DefaultCitationDate(TestUtilities.date("2008-11-25 23:00:00"), DateType.REVISION)));
                 thesaurus.setEdition(new Anchor(URI.create("SDN:C371:1:35"), "35"));
-                thesaurus.setIdentifiers(singleton(new ImmutableIdentifier(null, null, "http://www.seadatanet.org/urnurl/")));
+                thesaurus.setIdentifiers(Set.of(new ImmutableIdentifier(null, null, "http://www.seadatanet.org/urnurl/")));
                 keyword.setThesaurusName(thesaurus);
-                identification.setDescriptiveKeywords(singleton(keyword));
+                identification.setDescriptiveKeywords(Set.of(keyword));
             }
             /*
              * Data indentification / Browse graphic.
@@ -215,15 +213,15 @@ public final strictfp class MetadataTest extends TestCase {
             {
                 final DefaultBrowseGraphic g = new DefaultBrowseGraphic(URI.create("file:///thumbnail.png"));
                 g.setFileDescription(new SimpleInternationalString("Arbitrary thumbnail for this test only."));
-                identification.setGraphicOverviews(singleton(g));
+                identification.setGraphicOverviews(Set.of(g));
             }
             /*
              * Data indentification / Resource constraint.
              */
             {
                 final DefaultLegalConstraints constraint = new DefaultLegalConstraints();
-                constraint.setAccessConstraints(singleton(Restriction.LICENCE));
-                identification.setResourceConstraints(singleton(constraint));
+                constraint.setAccessConstraints(Set.of(Restriction.LICENCE));
+                identification.setResourceConstraints(Set.of(constraint));
             }
             /*
              * Data indentification / Aggregate information.
@@ -232,12 +230,12 @@ public final strictfp class MetadataTest extends TestCase {
                 @SuppressWarnings("deprecation")
                 final DefaultAssociatedResource aggregateInfo = new DefaultAggregateInformation();
                 final DefaultCitation name = new DefaultCitation("Some oceanographic campaign");
-                name.setAlternateTitles(singleton(new SimpleInternationalString("Pseudo group of data")));
-                name.setDates(singleton(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION)));
+                name.setAlternateTitles(Set.of(new SimpleInternationalString("Pseudo group of data")));
+                name.setDates(Set.of(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION)));
                 aggregateInfo.setName(name);
                 aggregateInfo.setInitiativeType(InitiativeType.CAMPAIGN);
                 aggregateInfo.setAssociationType(AssociationType.LARGER_WORK_CITATION);
-                identification.setAssociatedResources(singleton(aggregateInfo));
+                identification.setAssociatedResources(Set.of(aggregateInfo));
             }
             /*
              * Data indentification / Extent.
@@ -257,7 +255,7 @@ public final strictfp class MetadataTest extends TestCase {
 
                 final DefaultTemporalExtent temporal = new DefaultTemporalExtent();
                 temporal.setBounds(TestUtilities.date("1990-06-05 00:00:00"), TestUtilities.date("1990-07-02 00:00:00"));
-                identification.setExtents(singleton(new DefaultExtent(
+                identification.setExtents(Set.of(new DefaultExtent(
                         null,
                         new DefaultGeographicBoundingBox(1.1666, 1.1667, 36.4, 36.6),
                         new DefaultVerticalExtent(10, 25, vcrs),
@@ -270,7 +268,7 @@ public final strictfp class MetadataTest extends TestCase {
                 identification.setEnvironmentDescription (new SimpleInternationalString("Possibly cloudy."));
                 identification.setSupplementalInformation(new SimpleInternationalString("This metadata has been modified with dummy values."));
             }
-            metadata.setIdentificationInfo(singleton(identification));
+            metadata.setIdentificationInfo(Set.of(identification));
         }
         /*
          * Information about spatial representation.
@@ -278,18 +276,18 @@ public final strictfp class MetadataTest extends TestCase {
         {
             final DefaultVectorSpatialRepresentation rep = new DefaultVectorSpatialRepresentation();
             final DefaultGeometricObjects geoObj = new DefaultGeometricObjects(GeometricObjectType.POINT);
-            rep.setGeometricObjects(singleton(geoObj));
-            metadata.setSpatialRepresentationInfo(singleton(rep));
+            rep.setGeometricObjects(Set.of(geoObj));
+            metadata.setSpatialRepresentationInfo(Set.of(rep));
         }
         /*
          * Information about Coordinate Reference System.
          */
         {
             final DefaultCitation citation = new DefaultCitation("World Geodetic System 84");
-            citation.setAlternateTitles(singleton(new SimpleInternationalString("L101")));
-            citation.setIdentifiers(singleton(new ImmutableIdentifier(null, null, "SDN:L101:2:4326")));
+            citation.setAlternateTitles(Set.of(new SimpleInternationalString("L101")));
+            citation.setIdentifiers(Set.of(new ImmutableIdentifier(null, null, "SDN:L101:2:4326")));
             citation.setEdition(new Anchor(URI.create("SDN:C371:1:2"), "2"));
-            metadata.setReferenceSystemInfo(singleton(
+            metadata.setReferenceSystemInfo(Set.of(
                     new ReferenceSystemMetadata(new ImmutableIdentifier(citation, "L101", "4326"))));
         }
         /*
@@ -298,14 +296,14 @@ public final strictfp class MetadataTest extends TestCase {
         {
             final DefaultImageDescription contentInfo = new DefaultImageDescription();
             contentInfo.setCloudCoverPercentage(50.0);
-            metadata.setContentInfo(singleton(contentInfo));
+            metadata.setContentInfo(Set.of(contentInfo));
         }
         /*
          * Extension to metadata.
          */
         {
             final DefaultMetadataExtensionInformation extensionInfo = new DefaultMetadataExtensionInformation();
-            extensionInfo.setExtendedElementInformation(singleton(new DefaultExtendedElementInformation(
+            extensionInfo.setExtendedElementInformation(Set.of(new DefaultExtendedElementInformation(
                     "SDN:EDMO",                                                     // Name
                     "European Directory of Marine Organisations",                   // Definition
                     null,                                                           // Condition
@@ -313,7 +311,7 @@ public final strictfp class MetadataTest extends TestCase {
                     "SeaDataNet",                                                   // Parent entity
                     "For testing only",                                             // Rule
                     NilReason.MISSING.createNilObject(Responsibility.class))));     // Source
-            metadata.setMetadataExtensionInfo(singleton(extensionInfo));
+            metadata.setMetadataExtensionInfo(Set.of(extensionInfo));
         }
         /*
          * Distribution information.
@@ -323,14 +321,14 @@ public final strictfp class MetadataTest extends TestCase {
             final DefaultResponsibility distributor = new DefaultResponsibleParty(author);
             final DefaultDistribution distributionInfo = new DefaultDistribution();
             distributor.setRole(Role.DISTRIBUTOR);
-            distributionInfo.setDistributors(singleton(new DefaultDistributor(distributor)));
+            distributionInfo.setDistributors(Set.of(new DefaultDistributor(distributor)));
 
             final DefaultFormat format = new DefaultFormat();
             final DefaultCitation specification = new DefaultCitation();
-            specification.setAlternateTitles(singleton(new Anchor(URI.create("SDN:L241:1:MEDATLAS"), "MEDATLAS ASCII")));
+            specification.setAlternateTitles(Set.of(new Anchor(URI.create("SDN:L241:1:MEDATLAS"), "MEDATLAS ASCII")));
             specification.setEdition(new SimpleInternationalString("1.0"));
             format.setFormatSpecificationCitation(specification);
-            distributionInfo.setDistributionFormats(singleton(format));
+            distributionInfo.setDistributionFormats(Set.of(format));
 
             final DefaultDigitalTransferOptions transfer = new DefaultDigitalTransferOptions();
             transfer.setTransferSize(2.431640625);
@@ -338,9 +336,9 @@ public final strictfp class MetadataTest extends TestCase {
             onlines.setDescription(new SimpleInternationalString("Dummy download link"));
             onlines.setFunction(OnLineFunction.DOWNLOAD);
             onlines.setProtocol("ftp");
-            transfer.setOnLines(singleton(onlines));
-            distributionInfo.setTransferOptions(singleton(transfer));
-            metadata.setDistributionInfo(singleton(distributionInfo));
+            transfer.setOnLines(Set.of(onlines));
+            distributionInfo.setTransferOptions(Set.of(transfer));
+            metadata.setDistributionInfo(Set.of(distributionInfo));
         }
         return metadata;
     }
diff --git a/core/sis-utility/src/test/java/org/apache/sis/internal/util/AbstractMapTest.java b/core/sis-utility/src/test/java/org/apache/sis/internal/util/AbstractMapTest.java
index db13e37224..79b947a338 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/internal/util/AbstractMapTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/internal/util/AbstractMapTest.java
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.util;
 
 import java.util.List;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -47,7 +46,7 @@ public final strictfp class AbstractMapTest extends TestCase {
      * or consistency.
      */
     private static final class Count extends AbstractMap<Integer,String> {
-        private final List<String> values = new ArrayList<>(Arrays.asList("one", "two", "three"));
+        private final List<String> values = new ArrayList<>(List.of("one", "two", "three"));
 
         @Override public    void    clear   ()                    {       values.clear();}
         @Override public    String  get     (Object  k)           {return values.get(((Integer) k) - 1);}
diff --git a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CheckedArrayListTest.java b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CheckedArrayListTest.java
index 169bf0f65d..cb8dfd22c5 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CheckedArrayListTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CheckedArrayListTest.java
@@ -46,7 +46,7 @@ public final strictfp class CheckedArrayListTest extends TestCase {
         assertTrue(list.add("One"));
         assertTrue(list.add("Two"));
         assertTrue(list.add("Three"));
-        assertEquals(Arrays.asList("One", "Two", "Three"), list);
+        assertEquals(List.of("One", "Two", "Three"), list);
     }
 
     /**
@@ -57,7 +57,7 @@ public final strictfp class CheckedArrayListTest extends TestCase {
         final CheckedArrayList<String> list = new CheckedArrayList<>(String.class);
         assertTrue(list.add("One"));
         assertTrue(Collections.addAll(list, "Two", "Three"));
-        assertEquals(Arrays.asList("One", "Two", "Three"), list);
+        assertEquals(List.of("One", "Two", "Three"), list);
     }
 
     /**
@@ -137,7 +137,7 @@ public final strictfp class CheckedArrayListTest extends TestCase {
     @DependsOnMethod("testAddAll")
     public void testCastOrCopy() {
         assertNull(CheckedArrayList.castOrCopy(null, String.class));
-        final List<String> fruits = Arrays.asList("Apple", "Orange", "Raisin");
+        final List<String> fruits = List.of("Apple", "Orange", "Raisin");
         final CheckedArrayList<String> asStrings = CheckedArrayList.castOrCopy(fruits, String.class);
         assertEquals ("Should have the given element type.", String.class, asStrings.getElementType());
         assertNotSame("Should have created a new instance.", fruits, asStrings);
diff --git a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CollectionsExtTest.java b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CollectionsExtTest.java
index 7b8fb254f1..502bcea35d 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CollectionsExtTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CollectionsExtTest.java
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.util;
 
 import java.util.List;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.AbstractMap;
@@ -155,11 +154,11 @@ public final strictfp class CollectionsExtTest extends TestCase {
      */
     @Test
     public void testIdentityEquals() {
-        final List<String> c1 = Arrays.asList("A", "B", "C");
-        final List<String> c2 = Arrays.asList("A", "B");
+        final List<String> c1 = List.of("A", "B", "C");
+        final List<String> c2 = List.of("A", "B");
         assertFalse(CollectionsExt.identityEquals(c1.iterator(), c2.iterator()));
         assertFalse(CollectionsExt.identityEquals(c2.iterator(), c1.iterator()));
-        assertTrue(CollectionsExt.identityEquals(c1.iterator(), Arrays.asList("A", "B", "C").iterator()));
+        assertTrue(CollectionsExt.identityEquals(c1.iterator(), List.of("A", "B", "C").iterator()));
     }
 
     /**
@@ -170,7 +169,7 @@ public final strictfp class CollectionsExtTest extends TestCase {
     @Test
     public void testToArray() {
         final String[] expected = new String[] {"One", "Two", "Three"};
-        final String[] actual = CollectionsExt.toArray(Arrays.asList(expected), String.class);
+        final String[] actual = CollectionsExt.toArray(List.of(expected), String.class);
         assertArrayEquals(expected, actual);
     }
 }
diff --git a/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java b/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java
index b2019276e6..8e74d75678 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.measure;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Collections;
@@ -310,7 +310,7 @@ public final strictfp class SystemUnitTest extends TestCase {
         /*
          * Verify that the unit cannot be casted to an incompatible units.
          */
-        for (final Unit<Length> unit : Arrays.asList(Units.METRE, anonymous, otherName)) {
+        for (final Unit<Length> unit : List.of(Units.METRE, anonymous, otherName)) {
             try {
                 unit.asType(Time.class);
                 fail("Expected an exception for incompatible quantity types.");
@@ -338,7 +338,7 @@ public final strictfp class SystemUnitTest extends TestCase {
         assertEquals("Should have a name since we invoked 'alternate'.", "strange", named.getSymbol());
         assertSame  ("Should prefer the named instance.", named, Units.METRE.asType(Strange.class));
         assertSame  ("Go back to the fundamental unit.",  Units.METRE, named.asType(Length.class));
-        for (final Unit<Strange> unit : Arrays.asList(strange, named)) {
+        for (final Unit<Strange> unit : List.of(strange, named)) {
             try {
                 unit.asType(Time.class);
                 fail("Expected an exception for incompatible quantity types.");
diff --git a/core/sis-utility/src/test/java/org/apache/sis/measure/UnitServicesTest.java b/core/sis-utility/src/test/java/org/apache/sis/measure/UnitServicesTest.java
index 6186087687..3c1e667751 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/measure/UnitServicesTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/measure/UnitServicesTest.java
@@ -17,7 +17,7 @@
 package org.apache.sis.measure;
 
 import java.util.Set;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import javax.measure.Unit;
 import javax.measure.format.UnitFormat;
@@ -120,7 +120,7 @@ public final strictfp class UnitServicesTest extends TestCase {
     @Test
     public void testGetAvailableFormatNames() {
         final ServiceProvider provider = ServiceProvider.current();
-        assertSetEquals(Arrays.asList("SYMBOL", "UCUM", "NAME"),
+        assertSetEquals(List.of("SYMBOL", "UCUM", "NAME"),
                 provider.getUnitFormatService().getAvailableFormatNames());
     }
 
diff --git a/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java b/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java
index 53e729e61e..07f66e8307 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.util.collection;
 
+import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.AbstractMap.SimpleEntry;
@@ -36,7 +37,6 @@ import org.apache.sis.test.Performance;
 import org.junit.Test;
 
 import static java.lang.StrictMath.*;
-import static java.util.Collections.singleton;
 import static org.apache.sis.test.Assert.*;
 
 
@@ -92,10 +92,10 @@ public final strictfp class CacheTest extends TestCase {
         assertNull("No initial value expected.", handler.peek());
         handler.putAndUnlock(value);
 
-        assertEquals(1,              cache.size());
-        assertEquals(value,          cache.peek(key));
-        assertEquals(singleton(key), cache.keySet());
-        assertEquals(singleton(new SimpleEntry<>(key, value)), cache.entrySet());
+        assertEquals(1,           cache.size());
+        assertEquals(value,       cache.peek(key));
+        assertEquals(Set.of(key), cache.keySet());
+        assertEquals(Set.of(new SimpleEntry<>(key, value)), cache.entrySet());
     }
 
     /**
diff --git a/core/sis-utility/src/test/java/org/apache/sis/util/collection/CodeListSetTest.java b/core/sis-utility/src/test/java/org/apache/sis/util/collection/CodeListSetTest.java
index 6db8e8d862..e8540500f2 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/collection/CodeListSetTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/collection/CodeListSetTest.java
@@ -290,6 +290,6 @@ public final strictfp class CodeListSetTest extends TestCase {
          */
         assertTrue("Add the element to be retained.", clone.add(lastRemoved));
         assertTrue(c.retainAll(clone));
-        assertEquals(Collections.singleton(lastRemoved), c);
+        assertEquals(Set.of(lastRemoved), c);
     }
 }
diff --git a/core/sis-utility/src/test/java/org/apache/sis/util/collection/DerivedSetTest.java b/core/sis-utility/src/test/java/org/apache/sis/util/collection/DerivedSetTest.java
index 0b564e7fbe..ad48777f2a 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/collection/DerivedSetTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/collection/DerivedSetTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.sis.util.collection;
 
+import java.util.List;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.EnumSet;
-import java.util.Arrays;
 import org.apache.sis.math.FunctionProperty;
 import org.apache.sis.util.ObjectConverter;
 import org.apache.sis.test.TestCase;
@@ -50,8 +50,8 @@ public final strictfp class DerivedSetTest extends TestCase implements ObjectCon
      */
     @Test
     public void testNoExclusion() {
-        final Set<Integer> source = new HashSet<>(Arrays.asList(2,  7,  12,  17,  20 ));
-        final Set<Integer> target = new HashSet<>(Arrays.asList(20, 70, 120, 170, 200));
+        final Set<Integer> source = new HashSet<>(List.of(2,  7,  12,  17,  20 ));
+        final Set<Integer> target = new HashSet<>(List.of(20, 70, 120, 170, 200));
         final Set<Integer> tested = DerivedSet.create(source, this);
         assertEquals(target.size(), tested.size());
         assertEquals(target, tested);
@@ -76,8 +76,8 @@ public final strictfp class DerivedSetTest extends TestCase implements ObjectCon
      */
     @Test
     public void testWithExclusion() {
-        final Set<Integer> source = new HashSet<>(Arrays.asList(2,  7,  12,  EXCLUDED, 20));
-        final Set<Integer> target = new HashSet<>(Arrays.asList(20, 70, 120, 200));
+        final Set<Integer> source = new HashSet<>(List.of(2,  7,  12,  EXCLUDED, 20));
+        final Set<Integer> target = new HashSet<>(List.of(20, 70, 120, 200));
         final Set<Integer> tested = DerivedSet.create(source, this);
         assertEquals(target.size(), tested.size());
         assertEquals(target, tested);
diff --git a/core/sis-utility/src/test/java/org/apache/sis/util/collection/FrequencySortedSetTest.java b/core/sis-utility/src/test/java/org/apache/sis/util/collection/FrequencySortedSetTest.java
index 4eb9ee7694..9815058124 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/collection/FrequencySortedSetTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/collection/FrequencySortedSetTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.util.collection;
 
+import java.util.Set;
 import java.util.Collections;
 import org.apache.sis.test.DependsOnMethod;
 import org.apache.sis.test.TestCase;
@@ -43,7 +44,7 @@ public final strictfp class FrequencySortedSetTest extends TestCase {
             final FrequencySortedSet<Integer> set = new FrequencySortedSet<>(reverse);
             assertFalse(set.add(12, 0));
             assertTrue (set.add(18, 11));
-            assertEquals(Collections.singleton(18), set);
+            assertEquals(Set.of(18), set);
             assertArrayEquals(new int[] {11}, set.frequencies());
         } while ((reverse = !reverse) == true);
     }
diff --git a/core/sis-utility/src/test/java/org/apache/sis/util/collection/IntegerListTest.java b/core/sis-utility/src/test/java/org/apache/sis/util/collection/IntegerListTest.java
index 11e74c33e3..94b3b5d108 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/collection/IntegerListTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/collection/IntegerListTest.java
@@ -20,7 +20,6 @@ import java.util.List;
 import java.util.ArrayList;
 import java.util.Set;
 import java.util.HashSet;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.Random;
 import java.util.ConcurrentModificationException;
@@ -149,11 +148,11 @@ public final strictfp class IntegerListTest extends TestCase {
         final Set<Integer> set = new HashSet<>();
         list.fill(value);
         set.addAll(list);
-        assertEquals("fill(value)", Collections.singleton(value), set);
+        assertEquals("fill(value)", Set.of(value), set);
         list.fill(0);
         set.clear();
         set.addAll(list);
-        assertEquals("fill(0)", Collections.singleton(0), set);
+        assertEquals("fill(0)", Set.of(0), set);
     }
 
     /**
diff --git a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
index 160c39d596..2387c93a91 100644
--- a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.storage.csv;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Iterator;
 import java.time.Instant;
 import java.io.StringReader;
@@ -27,6 +27,8 @@ import org.apache.sis.feature.FoliationRepresentation;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.storage.DataOptionKey;
+import org.apache.sis.setup.OptionKey;
+import org.apache.sis.setup.GeometryLibrary;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 import com.esri.core.geometry.Point2D;
@@ -83,9 +85,12 @@ public final strictfp class StoreTest extends TestCase {
     /**
      * Opens a CSV store on the test data for reading the lines as-is, without assembling them in a single trajectory.
      */
-    private static Store open() throws DataStoreException {
-        StorageConnector connector = new StorageConnector(testData());
-        connector.setOption(DataOptionKey.FOLIATION_REPRESENTATION, FoliationRepresentation.FRAGMENTED);
+    private static Store open(final boolean fragmented) throws DataStoreException {
+        final var connector = new StorageConnector(testData());
+        if (fragmented) {
+            connector.setOption(DataOptionKey.FOLIATION_REPRESENTATION, FoliationRepresentation.FRAGMENTED);
+        }
+        connector.setOption(OptionKey.GEOMETRY_LIBRARY, GeometryLibrary.ESRI);
         return new Store(null, connector);
     }
 
@@ -97,7 +102,7 @@ public final strictfp class StoreTest extends TestCase {
     @Test
     public void testGetMetadata() throws DataStoreException {
         final Metadata metadata;
-        try (Store store = open()) {
+        try (Store store = open(true)) {
             metadata = store.getMetadata();
         }
         final Extent extent = getSingleton(getSingleton(metadata.getIdentificationInfo()).getExtents());
@@ -116,7 +121,7 @@ public final strictfp class StoreTest extends TestCase {
      */
     @Test
     public void testStaticFeatures() throws DataStoreException {
-        try (Store store = open()) {
+        try (Store store = open(true)) {
             verifyFeatureType(store.featureType, double[].class, 1);
             assertEquals("foliation", Foliation.TIME, store.foliation);
             final Iterator<Feature> it = store.features(false).iterator();
@@ -145,13 +150,13 @@ public final strictfp class StoreTest extends TestCase {
     @Test
     public void testMovingFeatures() throws DataStoreException {
         isMovingFeature = true;
-        try (Store store = new Store(null, new StorageConnector(testData()))) {
+        try (Store store = open(false)) {
             verifyFeatureType(store.featureType, Polyline.class, Integer.MAX_VALUE);
             assertEquals("foliation", Foliation.TIME, store.foliation);
             final Iterator<Feature> it = store.features(false).iterator();
-            assertPropertyEquals(it.next(), "a", "12:33:51", "12:36:51", new double[] {11, 2, 12, 3, 10, 3}, singletonList("walking"), Arrays.asList(1, 2));
-            assertPropertyEquals(it.next(), "b", "12:33:51", "12:36:51", new double[] {10, 2, 11, 3},        singletonList("walking"), singletonList(2));
-            assertPropertyEquals(it.next(), "c", "12:33:51", "12:36:51", new double[] {12, 1, 10, 2, 11, 3}, singletonList("vehicle"), singletonList(1));
+            assertPropertyEquals(it.next(), "a", "12:33:51", "12:36:51", new double[] {11, 2, 12, 3, 10, 3}, singletonList("walking"), List.of(1, 2));
+            assertPropertyEquals(it.next(), "b", "12:33:51", "12:36:51", new double[] {10, 2, 11, 3},        singletonList("walking"), List.of(2));
+            assertPropertyEquals(it.next(), "c", "12:33:51", "12:36:51", new double[] {12, 1, 10, 2, 11, 3}, singletonList("vehicle"), List.of(1));
             assertFalse(it.hasNext());
         }
     }
diff --git a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/folder/StoreTest.java b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/folder/StoreTest.java
index ae1ecfc087..54289ca9f0 100644
--- a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/folder/StoreTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/folder/StoreTest.java
@@ -21,8 +21,8 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import org.opengis.parameter.ParameterValueGroup;
 import org.opengis.metadata.identification.Identification;
@@ -69,7 +69,7 @@ public final strictfp class StoreTest extends TestCase {
      */
     @Test
     public void testComponents() throws URISyntaxException, DataStoreException, IOException {
-        final Set<String> identifiers = new HashSet<>(Arrays.asList("EPSG:4326", "Sample 1", "Sample 2", "Sample 3", "data4"));
+        final Set<String> identifiers = new HashSet<>(List.of("EPSG:4326", "Sample 1", "Sample 2", "Sample 3", "data4"));
         final Path path = testDirectory();
         try (Store store = new Store(null, new StorageConnector(path), path, null)) {
             assertEquals("Wrong number of data stores.", 4, store.components().size());
@@ -90,7 +90,7 @@ public final strictfp class StoreTest extends TestCase {
     @Test
     public void testSearchProviderParameter() throws URISyntaxException, DataStoreException, IOException {
         final StoreProvider provider = new StoreProvider();
-        final Set<String> identifiers = new HashSet<>(Arrays.asList("Sample 1", "Sample 2", "Sample 3", "data4"));
+        final Set<String> identifiers = new HashSet<>(List.of("Sample 1", "Sample 2", "Sample 3", "data4"));
         final ParameterValueGroup params = StoreProvider.PARAMETERS.createValue();
         params.parameter("location").setValue(testDirectory());
         params.parameter("format").setValue("XML");
diff --git a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
index 4fec239bca..e507067c89 100644
--- a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
@@ -16,8 +16,7 @@
  */
 package org.apache.sis.storage.aggregate;
 
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.List;
 import org.opengis.metadata.Metadata;
 import org.opengis.metadata.lineage.Lineage;
 import org.opengis.metadata.content.FeatureCatalogueDescription;
@@ -61,8 +60,8 @@ public final strictfp class ConcatenatedFeatureSetTest extends TestCase {
 
         final FeatureType ft = builder.build();
         final FeatureSet cfs = ConcatenatedFeatureSet.create(
-                new MemoryFeatureSet(null, ft, Arrays.asList(ft.newInstance(), ft.newInstance())),
-                new MemoryFeatureSet(null, ft, Arrays.asList(ft.newInstance())));
+                new MemoryFeatureSet(null, ft, List.of(ft.newInstance(), ft.newInstance())),
+                new MemoryFeatureSet(null, ft, List.of(ft.newInstance())));
 
         assertSame("getType()", ft, cfs.getType());
         assertEquals("features.count()", 3, cfs.features(false).count());
@@ -108,7 +107,7 @@ public final strictfp class ConcatenatedFeatureSetTest extends TestCase {
         t1f2.setPropertyValue("value", 3);
         t1f2.setPropertyValue("label", "first-second");
 
-        final FeatureSet t1fs = new MemoryFeatureSet(null, t1, Arrays.asList(t1f1, t1f2));
+        final FeatureSet t1fs = new MemoryFeatureSet(null, t1, List.of(t1f1, t1f2));
 
         // Populate a feature set for second type.
         final Feature t2f1 = t2.newInstance();
@@ -119,7 +118,7 @@ public final strictfp class ConcatenatedFeatureSetTest extends TestCase {
         t2f2.setPropertyValue("value", 4);
         t2f2.setPropertyValue("label", "second-second");
 
-        final FeatureSet t2fs = new MemoryFeatureSet(null, t2, Arrays.asList(t2f1, t2f2));
+        final FeatureSet t2fs = new MemoryFeatureSet(null, t2, List.of(t2f1, t2f2));
         /*
          * First, we'll test that total sum of value property is coherent with initialized features.
          * After that, we will ensure that we can get back the right labels for each subtype.
@@ -155,8 +154,8 @@ public final strictfp class ConcatenatedFeatureSetTest extends TestCase {
         final FeatureType mockSuperType = builder.build();
         final FeatureType firstType  = builder.setSuperTypes(mockSuperType).setName("first").build();
         final FeatureType secondType = builder.clear().setName("second").build();
-        final FeatureSet fs1 = new MemoryFeatureSet(null, firstType,  Collections.emptyList());
-        final FeatureSet fs2 = new MemoryFeatureSet(null, secondType, Collections.emptyList());
+        final FeatureSet fs1 = new MemoryFeatureSet(null, firstType,  List.of());
+        final FeatureSet fs2 = new MemoryFeatureSet(null, secondType, List.of());
         try {
             FeatureSet concatenation = ConcatenatedFeatureSet.create(fs1, fs2);
             fail("Concatenation succeeded despite the lack of common type. Result is:\n" + concatenation);
@@ -182,7 +181,7 @@ public final strictfp class ConcatenatedFeatureSetTest extends TestCase {
         }
         final FeatureTypeBuilder builder = new FeatureTypeBuilder().setName("mock");
         final FeatureType mockType = builder.build();
-        final FeatureSet fs1 = new MemoryFeatureSet(null, mockType, Collections.emptyList());
+        final FeatureSet fs1 = new MemoryFeatureSet(null, mockType, List.of());
         final FeatureSet set = ConcatenatedFeatureSet.create(fs1);
         assertSame("A concatenation has been created from a single type.", fs1, set);
     }
diff --git a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
index e9b1c3efd8..4c5191ff10 100644
--- a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage.aggregate;
 
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Iterator;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -72,7 +72,7 @@ public final strictfp class JoinFeatureSetTest extends TestCase {
         builder.addAttribute( String.class).setName("myNameSpace", "att1");
         builder.addAttribute(Integer.class).setName("myNameSpace", "att2");
         final FeatureType type1 = builder.build();
-        featureSet1 = new MemoryFeatureSet(null, type1, Arrays.asList(
+        featureSet1 = new MemoryFeatureSet(null, type1, List.of(
                 newFeature1(type1, "fid_1_0", "str1",   1),
                 newFeature1(type1, "fid_1_1", "str2",   2),
                 newFeature1(type1, "fid_1_2", "str3",   3),
@@ -84,7 +84,7 @@ public final strictfp class JoinFeatureSetTest extends TestCase {
         builder.addAttribute(Integer.class).setName("otherNameSpace", "att3");
         builder.addAttribute( Double.class).setName("otherNameSpace", "att4");
         final FeatureType type2 = builder.build();
-        featureSet2 = new MemoryFeatureSet(null, type2, Arrays.asList(
+        featureSet2 = new MemoryFeatureSet(null, type2, List.of(
                 newFeature2(type2, "fid_2_0",  1, 10),
                 newFeature2(type2, "fid_2_1",  2, 20),
                 newFeature2(type2, "fid_2_2",  2, 30),
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
index a544011381..22eb6f12cb 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
@@ -17,7 +17,7 @@
 package org.apache.sis.internal.storage.gpx;
 
 import java.net.URI;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -159,7 +159,7 @@ resp:   for (final Responsibility r : c.getResponsibleParties()) {
     @Override
     public Collection<Restriction> getUseConstraints() {
         if (license != null) {
-            return Arrays.asList(Restriction.COPYRIGHT, Restriction.LICENCE);
+            return List.of(Restriction.COPYRIGHT, Restriction.LICENCE);
         } else {
             return Collections.singleton(Restriction.COPYRIGHT);
         }
diff --git a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/MetadataTest.java b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/MetadataTest.java
index 567bd7660a..7dc5afe0b8 100644
--- a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/MetadataTest.java
+++ b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/MetadataTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.storage.gpx;
 
-import java.util.Arrays;
+import java.util.List;
 import java.net.URI;
 import java.net.URISyntaxException;
 import org.apache.sis.test.DependsOn;
@@ -95,12 +95,12 @@ public final strictfp class MetadataTest extends TestCase {
         metadata.author      = person;
         metadata.creator     = "DataProducer";
         metadata.copyright   = copyright;
-        metadata.keywords    = Arrays.asList("sample", "metadata");
+        metadata.keywords    = List.of("sample", "metadata");
         metadata.bounds      = bounds;
         metadata.time        = date("2010-03-01 00:00:00");
-        metadata.links       = Arrays.asList(new Link(new URI("http://first-address.org")),
-                                             new Link(new URI("http://second-address.org")),
-                                             new Link(new URI("http://third-address.org")));
+        metadata.links       = List.of(new Link(new URI("http://first-address.org")),
+                                       new Link(new URI("http://second-address.org")),
+                                       new Link(new URI("http://third-address.org")));
         metadata.links.get(2).type = "website";
         metadata.links.get(0).text = "first";
         return metadata;
diff --git a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/UpdaterTest.java b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/UpdaterTest.java
index 9f5ce3d2dc..085f8d2924 100644
--- a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/UpdaterTest.java
+++ b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/UpdaterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.internal.storage.gpx;
 
-import java.util.Arrays;
+import java.util.List;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -133,7 +133,7 @@ public final strictfp class UpdaterTest extends TestCase {
             point3.setPropertyValue("sis:geometry", new Point(35, 30));
             point1.setPropertyValue("time", Instant.parse("2010-01-10T00:00:00Z"));
             point3.setPropertyValue("time", Instant.parse("2010-01-30T00:00:00Z"));
-            store.add(Arrays.asList(point1, point2, point3).iterator());
+            store.add(List.of(point1, point2, point3).iterator());
         }
         assertXmlEquals(
                 "<gpx xmlns=\"" + Tags.NAMESPACE + "1/1\" version=\"1.1\">\n" +
diff --git a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
index 71d9260874..5e5de0203f 100644
--- a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
+++ b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.storage.gpx;
 
 import java.util.List;
-import java.util.Arrays;
 import java.time.Instant;
 import java.net.URI;
 import java.io.UncheckedIOException;
@@ -272,9 +271,9 @@ public final strictfp class WriterTest extends TestCase {
         point1.setPropertyValue("ageofdgpsdata", 55.55);
         point1.setPropertyValue("dgpsid",        256);
         point1.setPropertyValue("fix",           Fix.NONE);
-        point1.setPropertyValue("link",          Arrays.asList(new Link(new URI("http://first-address1.org")),
-                                                               new Link(new URI("http://first-address2.org")),
-                                                               new Link(new URI("http://first-address3.org"))));
+        point1.setPropertyValue("link",          List.of(new Link(new URI("http://first-address1.org")),
+                                                         new Link(new URI("http://first-address2.org")),
+                                                         new Link(new URI("http://first-address3.org"))));
         final Feature point3 = types.wayPoint.newInstance();
         point3.setPropertyValue("sis:geometry",  new Point(35, 30));
         point3.setPropertyValue("time",          Instant.parse("2010-01-30T00:00:00Z"));
@@ -294,11 +293,11 @@ public final strictfp class WriterTest extends TestCase {
         point3.setPropertyValue("ageofdgpsdata", 85.55);
         point3.setPropertyValue("dgpsid",        456);
         point3.setPropertyValue("fix",           Fix.THREE_DIMENSIONAL);
-        point3.setPropertyValue("link",          Arrays.asList(new Link(new URI("http://third-address1.org")),
-                                                               new Link(new URI("http://third-address2.org"))));
+        point3.setPropertyValue("link",          List.of(new Link(new URI("http://third-address1.org")),
+                                                         new Link(new URI("http://third-address2.org"))));
         final Feature point2 = types.wayPoint.newInstance();
         point2.setPropertyValue("sis:geometry", new Point(25, 20));
-        final List<Feature> wayPoints = Arrays.asList(point1, point2, point3);
+        final List<Feature> wayPoints = List.of(point1, point2, point3);
         final List<Feature> features;
         switch (type) {
             case WAY_POINT: {
@@ -314,11 +313,11 @@ public final strictfp class WriterTest extends TestCase {
                 route1.setPropertyValue("type",   "Route type");
                 route1.setPropertyValue("number", 7);
                 route1.setPropertyValue("rtept",  wayPoints);
-                route1.setPropertyValue("link",   Arrays.asList(new Link(new URI("http://route-address1.org")),
-                                                                new Link(new URI("http://route-address2.org")),
-                                                                new Link(new URI("http://route-address3.org"))));
+                route1.setPropertyValue("link",   List.of(new Link(new URI("http://route-address1.org")),
+                                                          new Link(new URI("http://route-address2.org")),
+                                                          new Link(new URI("http://route-address3.org"))));
                 final Feature route2 = types.route.newInstance();
-                features = Arrays.asList(route1, route2);
+                features = List.of(route1, route2);
                 break;
             }
             case TRACK: {
@@ -333,12 +332,12 @@ public final strictfp class WriterTest extends TestCase {
                 track1.setPropertyValue("src",    "Track source");
                 track1.setPropertyValue("type",   "Track type");
                 track1.setPropertyValue("number", 7);
-                track1.setPropertyValue("trkseg", Arrays.asList(seg1, seg2));
-                track1.setPropertyValue("link",   Arrays.asList(new Link(new URI("http://track-address1.org")),
-                                                                new Link(new URI("http://track-address2.org")),
-                                                                new Link(new URI("http://track-address3.org"))));
+                track1.setPropertyValue("trkseg", List.of(seg1, seg2));
+                track1.setPropertyValue("link",   List.of(new Link(new URI("http://track-address1.org")),
+                                                          new Link(new URI("http://track-address2.org")),
+                                                          new Link(new URI("http://track-address3.org"))));
                 final Feature track2 = types.track.newInstance();
-                features = Arrays.asList(track1, track2);
+                features = List.of(track1, track2);
                 break;
             }
             default: throw new AssertionError(type);