diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/DoubleTapGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/DoubleTapGestureDetector.kt
index 0ccd304..1fc73ac 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/DoubleTapGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/DoubleTapGestureDetector.kt
@@ -30,6 +30,7 @@
 import androidx.ui.temputils.delay
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.PxPosition
+import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
 import kotlin.coroutines.CoroutineContext
 
@@ -102,7 +103,7 @@
             }
 
             if (pass == PointerEventPass.PostDown &&
-                changesToReturn.any { it.anyPositionChangeConsumed() }
+                changesToReturn.fastAny { it.anyPositionChangeConsumed() }
             ) {
                 state = State.Idle
             }
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/GestureUtils.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/GestureUtils.kt
index 9581101..5273f7e 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/GestureUtils.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/GestureUtils.kt
@@ -20,6 +20,7 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.ui.unit.IntPxSize
+import androidx.ui.util.fastAny
 
 /**
  * Utility method that determines if any pointers are currently in [bounds].
@@ -30,7 +31,7 @@
  * @return True if at least one pointer is in bounds.
  */
 fun List<PointerInputChange>.anyPointersInBounds(bounds: IntPxSize) =
-    any {
+    fastAny {
         it.current.down &&
                 it.current.position!!.x.value >= 0 &&
                 it.current.position!!.x < bounds.width &&
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/LongPressGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/LongPressGestureDetector.kt
index 0fa75d3..e0c33b3 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/LongPressGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/LongPressGestureDetector.kt
@@ -34,6 +34,7 @@
 import androidx.ui.temputils.delay
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.PxPosition
+import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
 import kotlin.coroutines.CoroutineContext
 
@@ -123,7 +124,7 @@
             if (
                 pass == PointerEventPass.PostDown &&
                 state != State.Idle &&
-                changes.any { it.anyPositionChangeConsumed() }
+                changes.fastAny { it.anyPositionChangeConsumed() }
             ) {
                 // If we are anything but Idle and something consumed movement, reset.
                 resetToIdle()
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
index 80e0fa6..a6d4fd0 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
@@ -29,6 +29,7 @@
 import androidx.ui.geometry.Offset
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.PxPosition
+import androidx.ui.util.fastAny
 
 /**
  * This gesture detector has callbacks for when a press gesture starts and ends for the purposes of
@@ -176,7 +177,7 @@
             if (
                 pass == PointerEventPass.PostDown &&
                 state == State.Started &&
-                internalChanges.any { it.anyPositionChangeConsumed() }
+                internalChanges.fastAny { it.anyPositionChangeConsumed() }
             ) {
                 // On the final pass, if we have started and any of the changes had consumed
                 // position changes, we cancel.
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/RawDragGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/RawDragGestureDetector.kt
index d8271fd..1cbb595 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/RawDragGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/RawDragGestureDetector.kt
@@ -34,6 +34,7 @@
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.PxPosition
 import androidx.ui.unit.px
+import androidx.ui.util.fastAny
 
 interface DragObserver {
 
@@ -163,7 +164,7 @@
 
                 // Handle up changes, which includes removing individual pointer VelocityTrackers
                 // and potentially calling onStop().
-                if (changesToReturn.any { it.changedToUpIgnoreConsumed() }) {
+                if (changesToReturn.fastAny { it.changedToUpIgnoreConsumed() }) {
 
                     var velocityTracker: VelocityTracker? = null
 
@@ -203,7 +204,7 @@
                 }
 
                 // For each new pointer that has been added, start tracking information about it.
-                if (changesToReturn.any { it.changedToDownIgnoreConsumed() }) {
+                if (changesToReturn.fastAny { it.changedToDownIgnoreConsumed() }) {
                     changesToReturn.forEach {
                         // If a pointer has changed to down, we should start tracking information
                         // about it.
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/TapGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/TapGestureDetector.kt
index df6c3ad..a740b46 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/TapGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/TapGestureDetector.kt
@@ -27,6 +27,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.unit.IntPxSize
+import androidx.ui.util.fastAny
 
 /**
  * This gesture detector fires a callback when a traditional press is being released.  This is
@@ -102,7 +103,7 @@
             }
 
             if (pass == PointerEventPass.PostDown && active &&
-                internalChanges.any { it.anyPositionChangeConsumed() }
+                internalChanges.fastAny { it.anyPositionChangeConsumed() }
             ) {
                 // On the final pass, if we have started and any of the changes had consumed
                 // position changes, we cancel.
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/LayoutNodeWrapper.kt b/ui/ui-platform/src/main/java/androidx/ui/core/LayoutNodeWrapper.kt
index 9a00e73..8b4743e 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/LayoutNodeWrapper.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/LayoutNodeWrapper.kt
@@ -38,6 +38,7 @@
 import androidx.ui.unit.toPx
 import androidx.ui.unit.toPxPosition
 import androidx.ui.unit.toPxSize
+import androidx.ui.util.fastAny
 import androidx.ui.util.fastForEach
 
 private val Unmeasured = IntPxSize(IntPx.Zero, IntPx.Zero)
@@ -489,7 +490,7 @@
 
     override fun draw(canvas: Canvas, density: Density) {
         if (introducedLayer != null ||
-            (!layoutNode.hasLayer && layoutNode.layoutChildren.any { it.hasElevation })
+            (!layoutNode.hasLayer && layoutNode.layoutChildren.fastAny { it.hasElevation })
         ) {
             layoutNodeInvalidate = null
             // we need to introduce a layer
@@ -540,7 +541,7 @@
         if (isGlobalPointerInBounds(pointerPositionRelativeToScreen)) {
             // Any because as soon as true is returned, we know we have found a hit path and we must
             //  not add PointerInputFilters on different paths so we should not even go looking.
-            return layoutNode.children.reversed().any { child ->
+            return layoutNode.children.reversed().fastAny { child ->
                 callHitTest(child, pointerPositionRelativeToScreen, hitPointerInputFilters)
             }
         } else {
@@ -576,7 +577,7 @@
     } else {
         // Any because as soon as true is returned, we know we have found a hit path and we must
         // not add PointerInputFilters on different paths so we should not even go looking.
-        return node.children.reversed().any { child ->
+        return node.children.reversed().fastAny { child ->
             callHitTest(child, globalPoint, hitPointerInputFilters)
         }
     }
diff --git a/ui/ui-util/api/0.1.0-dev09.txt b/ui/ui-util/api/0.1.0-dev09.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/0.1.0-dev09.txt
+++ b/ui/ui-util/api/0.1.0-dev09.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/api/current.txt b/ui/ui-util/api/current.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/current.txt
+++ b/ui/ui-util/api/current.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/api/public_plus_experimental_0.1.0-dev09.txt b/ui/ui-util/api/public_plus_experimental_0.1.0-dev09.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/public_plus_experimental_0.1.0-dev09.txt
+++ b/ui/ui-util/api/public_plus_experimental_0.1.0-dev09.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/api/public_plus_experimental_current.txt b/ui/ui-util/api/public_plus_experimental_current.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/public_plus_experimental_current.txt
+++ b/ui/ui-util/api/public_plus_experimental_current.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/api/restricted_0.1.0-dev09.txt b/ui/ui-util/api/restricted_0.1.0-dev09.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/restricted_0.1.0-dev09.txt
+++ b/ui/ui-util/api/restricted_0.1.0-dev09.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/api/restricted_current.txt b/ui/ui-util/api/restricted_current.txt
index e1cdf07..e8faee5 100644
--- a/ui/ui-util/api/restricted_current.txt
+++ b/ui/ui-util/api/restricted_current.txt
@@ -1,10 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.util {
 
-  public final class FastForEachKt {
-    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
-  }
-
   public final class InlineClassHelperKt {
     method public static inline long packFloats(float val1, float val2);
     method public static inline long packInts(int val1, int val2);
@@ -14,6 +10,11 @@
     method public static inline int unpackInt2(long value);
   }
 
+  public final class ListUtilsKt {
+    method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+    method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+  }
+
   public final class MathHelpersKt {
     method public static float lerp(float start, float stop, float fraction);
     method public static int lerp(int start, int stop, float fraction);
diff --git a/ui/ui-util/src/main/java/androidx/ui/util/FastForEach.kt b/ui/ui-util/src/main/java/androidx/ui/util/ListUtils.kt
similarity index 80%
rename from ui/ui-util/src/main/java/androidx/ui/util/FastForEach.kt
rename to ui/ui-util/src/main/java/androidx/ui/util/ListUtils.kt
index 9829b6c..f032a4f 100644
--- a/ui/ui-util/src/main/java/androidx/ui/util/FastForEach.kt
+++ b/ui/ui-util/src/main/java/androidx/ui/util/ListUtils.kt
@@ -25,4 +25,12 @@
         val item = get(index)
         action(item)
     }
-}
\ No newline at end of file
+}
+
+/**
+ * Returns `true` if at least one element matches the given [predicate].
+ */
+inline fun <T> List<T>.fastAny(predicate: (T) -> Boolean): Boolean {
+    fastForEach { if (predicate(it)) return true }
+    return false
+}
diff --git a/ui/ui-util/src/test/java/androidx/ui/util/FastForEachTest.kt b/ui/ui-util/src/test/java/androidx/ui/util/ListUtilsTest.kt
similarity index 76%
rename from ui/ui-util/src/test/java/androidx/ui/util/FastForEachTest.kt
rename to ui/ui-util/src/test/java/androidx/ui/util/ListUtilsTest.kt
index c08a696..8d1ae60 100644
--- a/ui/ui-util/src/test/java/androidx/ui/util/FastForEachTest.kt
+++ b/ui/ui-util/src/test/java/androidx/ui/util/ListUtilsTest.kt
@@ -17,12 +17,14 @@
 package androidx.ui.util
 
 import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
 
 @RunWith(JUnit4::class)
-class FastForEachTest {
+class ListUtilsTest {
     @Test
     fun regularIteration() {
         val list = listOf(1, 5, 10)
@@ -49,4 +51,22 @@
         assertEquals(1, otherList[0])
         assertEquals(10, otherList[1])
     }
+
+    @Test
+    fun anyEmpty() {
+        val list = listOf<Int>()
+        assertFalse(list.fastAny { it > 0 })
+    }
+
+    @Test
+    fun anyNotFound() {
+        val list = listOf(0, -1, -500)
+        assertFalse(list.fastAny { it > 0 })
+    }
+
+    @Test
+    fun anyFound() {
+        val list = listOf(0, -1, -500, 1)
+        assertTrue(list.fastAny { it > 0 })
+    }
 }
\ No newline at end of file
