Merge branch 'GEOMETRY-63__Matt'

Closes #55.
diff --git a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
index bd08b63..116c6a0 100644
--- a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
+++ b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
@@ -255,24 +255,7 @@
             final List<S> minusBoundaries = new ArrayList<>();
             final List<S> plusBoundaries = new ArrayList<>();
 
-            Split<? extends ConvexSubHyperplane<P>> split;
-            ConvexSubHyperplane<P> minusBoundary;
-            ConvexSubHyperplane<P> plusBoundary;
-
-            for (final S boundary : boundaries) {
-                split = boundary.split(splitter);
-
-                minusBoundary = split.getMinus();
-                plusBoundary = split.getPlus();
-
-                if (minusBoundary != null) {
-                    minusBoundaries.add(subhpType.cast(minusBoundary));
-                }
-
-                if (plusBoundary != null) {
-                    plusBoundaries.add(subhpType.cast(plusBoundary));
-                }
-            }
+            splitBoundaries(splitter, subhpType, minusBoundaries, plusBoundaries);
 
             minusBoundaries.add(subhpType.cast(trimmedSplitter));
             plusBoundaries.add(subhpType.cast(trimmedSplitter.reverse()));
@@ -281,6 +264,38 @@
         }
     }
 
+    /** Split the boundaries of the region by the given hyperplane, adding the split parts into the
+     * corresponding lists.
+     * @param splitter splitting hyperplane
+     * @param subhpType the type used for the boundary subhyperplanes
+     * @param minusBoundaries list that will contain the portions of the boundaries on the minus side
+     *      of the splitting hyperplane
+     * @param plusBoundaries list that will contain the portions of the boundaries on the plus side of
+     *      the splitting hyperplane
+     */
+    private void splitBoundaries(final Hyperplane<P> splitter, final Class<S> subhpType,
+            final List<S> minusBoundaries, final List<S> plusBoundaries) {
+
+        Split<? extends ConvexSubHyperplane<P>> split;
+        ConvexSubHyperplane<P> minusBoundary;
+        ConvexSubHyperplane<P> plusBoundary;
+
+        for (final S boundary : boundaries) {
+            split = boundary.split(splitter);
+
+            minusBoundary = split.getMinus();
+            plusBoundary = split.getPlus();
+
+            if (minusBoundary != null) {
+                minusBoundaries.add(subhpType.cast(minusBoundary));
+            }
+
+            if (plusBoundary != null) {
+                plusBoundaries.add(subhpType.cast(plusBoundary));
+            }
+        }
+    }
+
     /** Internal class encapsulating the logic for building convex region boundaries from collections of
      * hyperplanes.
      * @param <P> Point implementation type
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
index 879a22a..47dda36 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
@@ -50,6 +50,6 @@
      * @return a boundary source containing the given boundaries
      */
     static BoundarySource3D from(final Collection<Facet> boundaries) {
-        return () -> boundaries.stream();
+        return boundaries::stream;
     }
 }
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
index 43a7399..89dce03 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,7 +66,7 @@
     private Stream<LinecastPoint3D> getIntersectionStream(final Segment3D segment) {
         return boundarySrc.boundaryStream()
                 .map(boundary -> computeIntersection(boundary, segment))
-                .filter(intersection -> intersection != null);
+                .filter(Objects::nonNull);
     }
 
     /** Compute the intersection between a boundary facet and linecast intersecting segment. Null is
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
index a4e5ae5..561b144 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
@@ -50,6 +50,6 @@
      * @return a boundary source containing the given boundaries
      */
     static BoundarySource2D from(final Collection<Segment> boundaries) {
-        return () -> boundaries.stream();
+        return boundaries::stream;
     }
 }
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
index bf4133d..612c6a1 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,7 +66,7 @@
     private Stream<LinecastPoint2D> getIntersectionStream(final Segment segment) {
         return boundarySrc.boundaryStream()
                 .map(boundary -> computeIntersection(boundary, segment))
-                .filter(intersection -> intersection != null);
+                .filter(Objects::nonNull);
     }
 
     /** Compute the intersection between a boundary segment and linecast intersecting segment. Null is