diff --git a/topology/src/main/java/quarks/samples/topology/CombiningStreamsProcessingResults.java b/topology/src/main/java/quarks/samples/topology/CombiningStreamsProcessingResults.java
index e6f6810..6005c5b 100644
--- a/topology/src/main/java/quarks/samples/topology/CombiningStreamsProcessingResults.java
+++ b/topology/src/main/java/quarks/samples/topology/CombiningStreamsProcessingResults.java
@@ -25,7 +25,6 @@
 import java.util.concurrent.TimeUnit;
 
 import quarks.console.server.HttpServer;
-import quarks.function.ToIntFunction;
 import quarks.providers.development.DevelopmentProvider;
 import quarks.providers.direct.DirectProvider;
 import quarks.samples.utils.sensor.HeartMonitorSensor;
@@ -62,32 +61,27 @@
                 .filter(tuple -> tuple.get("Systolic") < 200 && tuple.get("Diastolic") < 130);
 
         // Split the stream by blood pressure category
-        List<TStream<Map<String, Integer>>> categories = readings.split(6, new ToIntFunction<Map<String, Integer>>() {
-            private static final long serialVersionUID = 1L;
-            @Override
-            public int applyAsInt(Map<String, Integer> tuple) {
-                if (tuple.get("Systolic") < 120 && tuple.get("Diastolic") < 80) {
-                    // Normal
-                    return 0;
-                } else if ((tuple.get("Systolic") >= 120 && tuple.get("Systolic") <= 139) ||
-                           (tuple.get("Diastolic") >= 80 && tuple.get("Diastolic") <= 89)) {
-                    // Prehypertension
-                    return 1;
-                } else if ((tuple.get("Systolic") >= 140 && tuple.get("Systolic") <= 159) ||
-                           (tuple.get("Diastolic") >= 90 && tuple.get("Diastolic") <= 99)) {
-                    // High Blood Pressure (Hypertension) Stage 1
-                    return 2;
-                } else if ((tuple.get("Systolic") >= 160 && tuple.get("Systolic") <= 179) ||
-                           (tuple.get("Diastolic") >= 100 && tuple.get("Diastolic") <= 109)) {
-                    // High Blood Pressure (Hypertension) Stage 2
-                    return 3;
-                } else if (tuple.get("Systolic") >= 180 && tuple.get("Diastolic") >= 110)  {
-                    // Hypertensive Crisis
-                    return 4;
-                } else {
-                    // Invalid
-                    return -1;
-                }
+        List<TStream<Map<String, Integer>>> categories = readings.split(6, tuple -> {
+            int s = tuple.get("Systolic");
+            int d = tuple.get("Diastolic");
+            if (s < 120 && d < 80) {
+                // Normal
+                return 0;
+            } else if ((s >= 120 && s <= 139) || (d >= 80 && d <= 89)) {
+                // Prehypertension
+                return 1;
+            } else if ((s >= 140 && s <= 159) || (d >= 90 && d <= 99)) {
+                // High Blood Pressure (Hypertension) Stage 1
+                return 2;
+            } else if ((s >= 160 && s <= 179) || (d >= 100 && d <= 109)) {
+                // High Blood Pressure (Hypertension) Stage 2
+                return 3;
+            } else if (s >= 180 && d >= 110)  {
+                // Hypertensive Crisis
+                return 4;
+            } else {
+                // Invalid
+                return -1;
             }
         });
 
