Add items(count: Int) overload for LazyColumn/LazyRow/LazyVerticalGrid

Relnote: "New items(count: Int) factory method for scope of LazyColumn/LazyRow/LazyVerticalGrid.
items(items: List) and itemsIndexed(items: List) are now extension functions so you have to manually import them when used.
New extension overloads for Arrays: items(items: Array) and itemsIndexed(Array)"
Test: new tests for arrays, updates few of existing tests
Fixes: 175562574

Change-Id: I803fc5f25fac55855c710ff5064f11525f7b6010
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatedVisiblilityLazyColumnDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatedVisiblilityLazyColumnDemo.kt
index 2d1b4b4..85eda9a 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatedVisiblilityLazyColumnDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatedVisiblilityLazyColumnDemo.kt
@@ -28,6 +28,7 @@
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.itemsIndexed
 import androidx.compose.material.Button
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
index 4e85b17..f04c311 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
@@ -38,6 +38,7 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentWidth
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.selection.selectable
 import androidx.compose.material.Button
 import androidx.compose.material.Checkbox
diff --git a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.kt b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.kt
index ffec340..38fe987 100644
--- a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.kt
+++ b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.kt
@@ -41,6 +41,7 @@
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.rememberScrollbarAdapter
 import androidx.compose.foundation.shape.CircleShape
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 6c0c722..862e432 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -329,6 +329,10 @@
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public final class LazyForKt {
@@ -340,12 +344,15 @@
 
   public final class LazyGridKt {
     method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.GridCells cells, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyGridScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public interface LazyGridScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.runtime.Stable public interface LazyItemScope {
@@ -382,8 +389,7 @@
 
   public interface LazyListScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
     method @androidx.compose.foundation.ExperimentalFoundationApi public void stickyHeader(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
   }
 
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index 6c0c722..862e432 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -329,6 +329,10 @@
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public final class LazyForKt {
@@ -340,12 +344,15 @@
 
   public final class LazyGridKt {
     method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.GridCells cells, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyGridScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public interface LazyGridScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.runtime.Stable public interface LazyItemScope {
@@ -382,8 +389,7 @@
 
   public interface LazyListScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
     method @androidx.compose.foundation.ExperimentalFoundationApi public void stickyHeader(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
   }
 
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 6c0c722..862e432 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -329,6 +329,10 @@
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public final class LazyForKt {
@@ -340,12 +344,15 @@
 
   public final class LazyGridKt {
     method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.GridCells cells, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyGridScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyGridScope, T![] items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   public interface LazyGridScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.runtime.Stable public interface LazyItemScope {
@@ -382,8 +389,7 @@
 
   public interface LazyListScope {
     method public void item(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method public <T> void items(java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method public <T> void itemsIndexed(java.util.List<? extends T> items, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public void items(int count, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
     method @androidx.compose.foundation.ExperimentalFoundationApi public void stickyHeader(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
   }
 
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
index d46aa5e..258a646 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
@@ -43,6 +43,8 @@
 import androidx.compose.foundation.lazy.GridCells
 import androidx.compose.foundation.lazy.LazyRow
 import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.itemsIndexed
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.samples.StickyHeaderSample
 import androidx.compose.foundation.shape.RoundedCornerShape
@@ -120,7 +122,7 @@
             Button(modifier = buttonModifier, onClick = { offset++ }) { Text("Offset") }
         }
         LazyColumn(Modifier.fillMaxWidth()) {
-            items((1..numItems).map { it + offset }.toList()) {
+            items((1..numItems).map { it + offset }) {
                 Text("$it", style = AmbientTextStyle.current.copy(fontSize = 40.sp))
             }
         }
@@ -193,7 +195,7 @@
             Modifier.fillMaxWidth(),
             state = state
         ) {
-            items((0..1000).toList()) {
+            items(1000) {
                 Text("$it", style = AmbientTextStyle.current.copy(fontSize = 40.sp))
             }
         }
@@ -215,7 +217,7 @@
 @Composable
 private fun LazyRowItemsDemo() {
     LazyRow {
-        items((1..1000).toList()) {
+        items(1000) {
             Square(it)
         }
     }
@@ -253,12 +255,12 @@
 private fun RtlListDemo() {
     Providers(AmbientLayoutDirection provides LayoutDirection.Rtl) {
         LazyRow(Modifier.fillMaxWidth()) {
-            itemsIndexed((0..100).toList()) { index, item ->
+            items(100) {
                 Text(
-                    "$item",
+                    "$it",
                     Modifier
                         .size(100.dp)
-                        .background(if (index % 2 == 0) Color.LightGray else Color.Transparent)
+                        .background(if (it % 2 == 0) Color.LightGray else Color.Transparent)
                         .padding(16.dp)
                 )
             }
@@ -287,7 +289,7 @@
 @Composable
 private fun LazyColumnScope() {
     LazyColumn {
-        items((1..10).toList()) {
+        items(10) {
             Text("$it", fontSize = 40.sp)
         }
 
@@ -305,7 +307,7 @@
 @Composable
 private fun LazyRowScope() {
     LazyRow {
-        items((1..10).toList()) {
+        items(10) {
             Text("$it", fontSize = 40.sp)
         }
 
@@ -363,7 +365,7 @@
                 verticalArrangement = Arrangements[arrangement],
                 modifier = Modifier.weight(1f).fillMaxHeight()
             ) {
-                (1..count).forEach {
+                repeat(count) {
                     item()
                 }
             }
@@ -371,7 +373,7 @@
                 verticalArrangement = Arrangements[arrangement],
                 modifier = Modifier.weight(1f).fillMaxHeight()
             ) {
-                items((1..count).toList()) {
+                items(count) {
                     item()
                 }
             }
@@ -434,12 +436,12 @@
                 modifier = Modifier.weight(1f).fillMaxHeight()
             ) {
                 if (reverse) {
-                    (count downTo 1).forEach {
+                    (count - 1 downTo 0).forEach {
                         item2(it)
                         item1(it)
                     }
                 } else {
-                    (1..count).forEach {
+                    (0 until count).forEach {
                         item1(it)
                         item2(it)
                     }
@@ -450,7 +452,7 @@
                 state = lazyState,
                 modifier = Modifier.weight(1f).fillMaxHeight()
             ) {
-                items((1..count).toList()) {
+                items(count) {
                     item1(it)
                     item2(it)
                 }
@@ -475,12 +477,12 @@
     LazyColumn {
         item {
             LazyRow {
-                items(List(100) { it }) {
+                items(100) {
                     item(it)
                 }
             }
         }
-        items(List(100) { it }) {
+        items(100) {
             item(it)
         }
     }
@@ -512,9 +514,7 @@
     LazyVerticalGrid(
         cells = mode
     ) {
-        items(
-            items = (1..100).toList()
-        ) {
+        items(100) {
             Text(
                 text = "$it",
                 fontSize = 20.sp,
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/LazyDslSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/LazyDslSamples.kt
index 1b71a259..6a442fd 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/LazyDslSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/LazyDslSamples.kt
@@ -23,6 +23,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.itemsIndexed
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
@@ -85,7 +87,7 @@
                     Modifier.fillMaxWidth().background(Color.LightGray).padding(8.dp)
                 )
             }
-            items((0..9).toList()) {
+            items(10) {
                 Text("Item $it from the section $section")
             }
         }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyArrangementsTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyArrangementsTest.kt
index e0dc1e2..e08cd60 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyArrangementsTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyArrangementsTest.kt
@@ -62,7 +62,7 @@
             LazyColumn(
                 modifier = Modifier.size(containerSize)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -96,7 +96,7 @@
             LazyRow(
                 modifier = Modifier.size(containerSize)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -152,7 +152,7 @@
                 verticalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.testTag(ContainerTag)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize))
                 }
             }
@@ -170,7 +170,7 @@
                 horizontalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.testTag(ContainerTag)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize))
                 }
             }
@@ -190,7 +190,7 @@
                 verticalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.size(itemSize * 3.5f)
             ) {
-                items((0..2).toList()) {
+                items(3) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -210,7 +210,7 @@
                 verticalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.size(itemSize * 3.5f).testTag(ContainerTag)
             ) {
-                items((0..2).toList()) {
+                items(3) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -233,7 +233,7 @@
                 horizontalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.size(itemSize * 3.5f)
             ) {
-                items((0..2).toList()) {
+                items(3) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -253,7 +253,7 @@
                 horizontalArrangement = Arrangement.spacedBy(itemSize),
                 modifier = Modifier.size(itemSize * 3.5f).testTag(ContainerTag)
             ) {
-                items((0..2).toList()) {
+                items(3) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -278,7 +278,7 @@
                 reverseLayout = true,
                 modifier = Modifier.size(containerSize)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -294,7 +294,7 @@
                 reverseLayout = true,
                 modifier = Modifier.size(containerSize)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -311,7 +311,7 @@
                 verticalArrangement = arrangement,
                 modifier = Modifier.size(containerSize)
             ) {
-                items((0..1).toList()) {
+                items(2) {
                     Box(Modifier.size(itemSize).testTag(it.toString()))
                 }
             }
@@ -325,7 +325,7 @@
                     horizontalArrangement = arrangement,
                     modifier = Modifier.size(containerSize)
                 ) {
-                    items((0..1).toList()) {
+                    items(2) {
                         Box(Modifier.size(itemSize).testTag(it.toString()))
                     }
                 }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnTest.kt
index 506aa92..fd5fc25 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnTest.kt
@@ -184,14 +184,12 @@
         var disposed = false
         // Ten 31dp spacers in a 300dp list
         val latch = CountDownLatch(10)
-        // Make it long enough that it's _definitely_ taller than the screen
-        val data = (1..50).toList()
 
         rule.setContent {
             // Fixed height to eliminate device size as a factor
             Box(Modifier.testTag(LazyListTag).preferredHeight(300.dp)) {
                 LazyColumn(Modifier.fillMaxSize()) {
-                    items(data) {
+                    items(50) {
                         onCommit {
                             composed = true
                             // Signal when everything is done composing
@@ -285,7 +283,7 @@
         rule.setContent {
             if (emitAdapterList) {
                 LazyColumn(Modifier.fillMaxSize()) {
-                    items(listOf(0, 1)) {
+                    items(2) {
                         Box(Modifier.size(100.dp))
                         onDispose {
                             if (it == 1) {
@@ -987,7 +985,6 @@
     @Test
     fun stateIsRestored() {
         val restorationTester = StateRestorationTester(rule)
-        val items by mutableStateOf((1..20).toList())
         var state: LazyListState? = null
         restorationTester.setContent {
             state = rememberLazyListState()
@@ -995,7 +992,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state!!
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -1046,7 +1043,6 @@
 
     @Test
     fun snapToItemIndex() {
-        val items by mutableStateOf((1..20).toList())
         lateinit var state: LazyListState
         rule.setContent {
             state = rememberLazyListState()
@@ -1054,7 +1050,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -1097,12 +1093,11 @@
 
     @Test
     fun itemInvalidationIsNotCausingAnotherItemToRedraw() {
-        val items = (0..1).toList()
         val redrawCount = Array(2) { 0 }
         var stateUsedInDrawScope by mutableStateOf(false)
         rule.setContent {
             LazyColumn(Modifier.size(100.dp).testTag(LazyListTag)) {
-                items(items) {
+                items(2) {
                     Spacer(
                         Modifier.size(50.dp)
                             .drawBehind {
@@ -1130,7 +1125,6 @@
 
     @Test
     fun notVisibleAnymoreItemNotAffectingCrossAxisSize() {
-        val items = (0..1).toList()
         val itemSize = with(rule.density) { 30.toDp() }
         val itemSizeMinusOne = with(rule.density) { 29.toDp() }
         lateinit var state: LazyListState
@@ -1139,7 +1133,7 @@
                 Modifier.height(itemSizeMinusOne).testTag(LazyListTag),
                 state = rememberLazyListState().also { state = it }
             ) {
-                items(items) {
+                items(2) {
                     Spacer(
                         if (it == 0) {
                             Modifier.width(30.dp).height(itemSizeMinusOne)
@@ -1187,6 +1181,54 @@
             .assertWidthIsEqualTo(30.dp)
     }
 
+    @Test
+    fun usedWithArray() {
+        val items = arrayOf("1", "2", "3")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyColumn {
+                items(items) {
+                    Spacer(Modifier.size(itemSize).testTag(it))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("1")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("2")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("3")
+            .assertTopPositionInRootIsEqualTo(itemSize * 2)
+    }
+
+    @Test
+    fun usedWithArrayIndexed() {
+        val items = arrayOf("1", "2", "3")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyColumn {
+                itemsIndexed(items) { index, item ->
+                    Spacer(Modifier.size(itemSize).testTag("$index*$item"))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("0*1")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("1*2")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("2*3")
+            .assertTopPositionInRootIsEqualTo(itemSize * 2)
+    }
+
     private fun SemanticsNodeInteraction.assertTopPositionIsAlmost(expected: Dp) {
         getUnclippedBoundsInRoot().top.assertIsEqualTo(expected, tolerance = 1.dp)
     }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyGridTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyGridTest.kt
index af17e7f..3e6ca0b 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyGridTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyGridTest.kt
@@ -18,13 +18,16 @@
 
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
+import androidx.compose.foundation.layout.width
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.assertIsDisplayed
 import androidx.compose.ui.test.assertLeftPositionInRootIsEqualTo
+import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.unit.dp
@@ -232,4 +235,72 @@
         rule.onNodeWithTag("3")
             .assertDoesNotExist()
     }
+
+    @Test
+    fun usedWithArray() {
+        val items = arrayOf("1", "2", "3", "4")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyVerticalGrid(
+                GridCells.Fixed(2),
+                Modifier.width(itemSize * 2)
+            ) {
+                items(items) {
+                    Spacer(Modifier.height(itemSize).testTag(it))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("1")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("2")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("3")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("4")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+    }
+
+    @Test
+    fun usedWithArrayIndexed() {
+        val items = arrayOf("1", "2", "3", "4")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyVerticalGrid(
+                GridCells.Fixed(2),
+                Modifier.width(itemSize * 2)
+            ) {
+                itemsIndexed(items) { index, item ->
+                    Spacer(Modifier.height(itemSize).testTag("$index*$item"))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("0*1")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("1*2")
+            .assertTopPositionInRootIsEqualTo(0.dp)
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("2*3")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("3*4")
+            .assertTopPositionInRootIsEqualTo(itemSize)
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+    }
 }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowTest.kt
index ea14a36..ebdc093 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowTest.kt
@@ -508,15 +508,13 @@
 
     @Test
     fun scrollsLeftInRtl() {
-        val items = (1..4).map { it.toString() }
-
         rule.setContent {
             Providers(AmbientLayoutDirection provides LayoutDirection.Rtl) {
                 Box(Modifier.preferredWidth(100.dp)) {
                     LazyRow(Modifier.testTag(LazyListTag)) {
-                        items(items) {
+                        items(4) {
                             Spacer(
-                                Modifier.preferredWidth(101.dp).fillParentMaxHeight().testTag(it)
+                                Modifier.preferredWidth(101.dp).fillParentMaxHeight().testTag("$it")
                             )
                         }
                     }
@@ -527,10 +525,10 @@
         rule.onNodeWithTag(LazyListTag)
             .scrollBy(x = (-150).dp, density = rule.density)
 
-        rule.onNodeWithTag("1")
+        rule.onNodeWithTag("0")
             .assertDoesNotExist()
 
-        rule.onNodeWithTag("2")
+        rule.onNodeWithTag("1")
             .assertIsDisplayed()
     }
 
@@ -721,7 +719,6 @@
 
     @Test
     fun stateUpdatedAfterScroll() {
-        val items by mutableStateOf((1..20).toList())
         lateinit var state: LazyListState
         rule.setContent {
             state = rememberLazyListState()
@@ -729,7 +726,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -758,7 +755,6 @@
 
     @Test
     fun stateUpdatedAfterScrollWithinTheSameItem() {
-        val items by mutableStateOf((1..20).toList())
         lateinit var state: LazyListState
         rule.setContent {
             state = rememberLazyListState()
@@ -766,7 +762,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -788,13 +784,12 @@
 
     @Test
     fun initialScrollIsApplied() {
-        val items by mutableStateOf((0..20).toList())
         lateinit var state: LazyListState
         val expectedOffset = with(rule.density) { 10.dp.toIntPx() }
         rule.setContent {
             state = rememberLazyListState(2, expectedOffset)
             LazyRow(Modifier.size(100.dp).testTag(LazyListTag), state = state) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -812,7 +807,6 @@
     @Test
     fun stateIsRestored() {
         val restorationTester = StateRestorationTester(rule)
-        val items by mutableStateOf((1..20).toList())
         var state: LazyListState? = null
         restorationTester.setContent {
             state = rememberLazyListState()
@@ -820,7 +814,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state!!
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -845,7 +839,6 @@
 
     @Test
     fun snapToItemIndex() {
-        val items by mutableStateOf((1..20).toList())
         lateinit var state: LazyListState
         rule.setContent {
             state = rememberLazyListState()
@@ -853,7 +846,7 @@
                 Modifier.size(100.dp).testTag(LazyListTag),
                 state = state
             ) {
-                items(items) {
+                items(20) {
                     Spacer(Modifier.size(20.dp).testTag("$it"))
                 }
             }
@@ -870,11 +863,10 @@
 
     @Test
     fun itemsAreNotRedrawnDuringScroll() {
-        val items = (0..20).toList()
         val redrawCount = Array(6) { 0 }
         rule.setContent {
             LazyRow(Modifier.size(100.dp).testTag(LazyListTag)) {
-                items(items) {
+                items(21) {
                     Spacer(
                         Modifier.size(20.dp)
                             .drawBehind { redrawCount[it]++ }
@@ -896,12 +888,11 @@
 
     @Test
     fun itemInvalidationIsNotCausingAnotherItemToRedraw() {
-        val items = (0..1).toList()
         val redrawCount = Array(2) { 0 }
         var stateUsedInDrawScope by mutableStateOf(false)
         rule.setContent {
             LazyRow(Modifier.size(100.dp).testTag(LazyListTag)) {
-                items(items) {
+                items(2) {
                     Spacer(
                         Modifier.size(50.dp)
                             .drawBehind {
@@ -986,6 +977,54 @@
             .assertHeightIsEqualTo(30.dp)
     }
 
+    @Test
+    fun usedWithArray() {
+        val items = arrayOf("1", "2", "3")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyRow {
+                items(items) {
+                    Spacer(Modifier.size(itemSize).testTag(it))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("1")
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("2")
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("3")
+            .assertLeftPositionInRootIsEqualTo(itemSize * 2)
+    }
+
+    @Test
+    fun usedWithArrayIndexed() {
+        val items = arrayOf("1", "2", "3")
+
+        val itemSize = with(rule.density) { 15.toDp() }
+
+        rule.setContent {
+            LazyRow {
+                itemsIndexed(items) { index, item ->
+                    Spacer(Modifier.size(itemSize).testTag("$index*$item"))
+                }
+            }
+        }
+
+        rule.onNodeWithTag("0*1")
+            .assertLeftPositionInRootIsEqualTo(0.dp)
+
+        rule.onNodeWithTag("1*2")
+            .assertLeftPositionInRootIsEqualTo(itemSize)
+
+        rule.onNodeWithTag("2*3")
+            .assertLeftPositionInRootIsEqualTo(itemSize * 2)
+    }
+
     private fun LazyListState.scrollBy(offset: Dp) {
         runBlocking {
             smoothScrollBy(with(rule.density) { offset.toIntPx().toFloat() }, snap())
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt
index 8e70fc1..e340491 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt
@@ -29,33 +29,19 @@
  */
 interface LazyListScope {
     /**
-     * Adds a list of items and their content to the scope.
-     *
-     * @param items the data list
-     * @param itemContent the content displayed by a single item
-     */
-    fun <T> items(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(item: T) -> Unit
-    )
-
-    /**
-     * Adds a single item to the scope.
+     * Adds a single item.
      *
      * @param content the content of the item
      */
     fun item(content: @Composable LazyItemScope.() -> Unit)
 
     /**
-     * Adds a list of items to the scope where the content of an item is aware of its index.
+     * Adds a [count] of items.
      *
-     * @param items the data list
+     * @param count the items count
      * @param itemContent the content displayed by a single item
      */
-    fun <T> itemsIndexed(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
-    )
+    fun items(count: Int, itemContent: @Composable LazyItemScope.(index: Int) -> Unit)
 
     /**
      * Adds a sticky header item, which will remain pinned even when scrolling after it.
@@ -69,6 +55,58 @@
     fun stickyHeader(content: @Composable LazyItemScope.() -> Unit)
 }
 
+/**
+ * Adds a list of items.
+ *
+ * @param items the data list
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyListScope.items(
+    items: List<T>,
+    crossinline itemContent: @Composable LazyItemScope.(item: T) -> Unit
+) = items(items.size) {
+    itemContent(items[it])
+}
+
+/**
+ * Adds a list of items where the content of an item is aware of its index.
+ *
+ * @param items the data list
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyListScope.itemsIndexed(
+    items: List<T>,
+    crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
+) = items(items.size) {
+    itemContent(it, items[it])
+}
+
+/**
+ * Adds an array of items.
+ *
+ * @param items the data array
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyListScope.items(
+    items: Array<T>,
+    crossinline itemContent: @Composable LazyItemScope.(item: T) -> Unit
+) = items(items.size) {
+    itemContent(items[it])
+}
+
+/**
+ * Adds an array of items where the content of an item is aware of its index.
+ *
+ * @param items the data array
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyListScope.itemsIndexed(
+    items: Array<T>,
+    crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
+) = items(items.size) {
+    itemContent(it, items[it])
+}
+
 internal class LazyListScopeImpl : LazyListScope {
     private val intervals = IntervalList<LazyItemScope.(Int) -> (@Composable () -> Unit)>()
     val totalSize get() = intervals.totalSize
@@ -82,13 +120,9 @@
         return interval.content(scope, localIntervalIndex)
     }
 
-    override fun <T> items(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(item: T) -> Unit
-    ) {
-        intervals.add(items.size) { index ->
-            val item = items[index]
-            @Composable { itemContent(item) }
+    override fun items(count: Int, itemContent: @Composable LazyItemScope.(index: Int) -> Unit) {
+        intervals.add(count) { index ->
+            @Composable { itemContent(index) }
         }
     }
 
@@ -96,16 +130,6 @@
         intervals.add(1) { @Composable { content() } }
     }
 
-    override fun <T> itemsIndexed(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
-    ) {
-        intervals.add(items.size) { index ->
-            val item = items[index]
-            @Composable { itemContent(index, item) }
-        }
-    }
-
     @ExperimentalFoundationApi
     override fun stickyHeader(content: @Composable LazyItemScope.() -> Unit) {
         val headersIndexes = headersIndexes ?: mutableListOf<Int>().also {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
index 2bad2c3..87583812 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
@@ -56,7 +56,8 @@
     ReplaceWith(
         "LazyColumn(modifier, state, contentPadding, horizontalAlignment = " +
             "horizontalAlignment) { \n items(items, itemContent) \n }",
-        "androidx.compose.foundation.lazy.LazyColumn"
+        "androidx.compose.foundation.lazy.LazyColumn",
+        "androidx.compose.foundation.lazy.items"
     )
 )
 fun <T> LazyColumnFor(
@@ -117,7 +118,8 @@
     ReplaceWith(
         "LazyColumn(modifier, state, contentPadding, horizontalAlignment = " +
             "horizontalAlignment) { \n itemsIndexed(items, itemContent) \n }",
-        "androidx.compose.foundation.lazy.LazyColumn"
+        "androidx.compose.foundation.lazy.LazyColumn",
+        "androidx.compose.foundation.lazy.itemsIndexed"
     )
 )
 fun <T> LazyColumnForIndexed(
@@ -175,7 +177,8 @@
     ReplaceWith(
         "LazyRow(modifier, state, contentPadding, verticalAlignment = " +
             "verticalAlignment) { \n items(items, itemContent) \n }",
-        "androidx.compose.foundation.lazy.LazyColumn"
+        "androidx.compose.foundation.lazy.LazyRow",
+        "androidx.compose.foundation.lazy.items"
     )
 )
 fun <T> LazyRowFor(
@@ -235,7 +238,8 @@
     ReplaceWith(
         "LazyRow(modifier, state, contentPadding, verticalAlignment = " +
             "verticalAlignment) { \n itemsIndexed(items, itemContent) \n }",
-        "androidx.compose.foundation.lazy.LazyColumn"
+        "androidx.compose.foundation.lazy.LazyRow",
+        "androidx.compose.foundation.lazy.itemsIndexed"
     )
 )
 fun <T> LazyRowForIndexed(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyGrid.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyGrid.kt
index a4bc0b6..4dda9f3 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyGrid.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyGrid.kt
@@ -107,17 +107,6 @@
  */
 interface LazyGridScope {
     /**
-     * Adds a list of items and their content to the scope.
-     *
-     * @param items the data list
-     * @param itemContent the content displayed by a single item
-     */
-    fun <T> items(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(item: T) -> Unit
-    )
-
-    /**
      * Adds a single item to the scope.
      *
      * @param content the content of the item
@@ -125,15 +114,64 @@
     fun item(content: @Composable LazyItemScope.() -> Unit)
 
     /**
-     * Adds a list of items to the scope where the content of an item is aware of its index.
+     * Adds a [count] of items.
      *
-     * @param items the data list
+     * @param count the items count
      * @param itemContent the content displayed by a single item
      */
-    fun <T> itemsIndexed(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
-    )
+    fun items(count: Int, itemContent: @Composable LazyItemScope.(index: Int) -> Unit)
+}
+
+/**
+ * Adds a list of items.
+ *
+ * @param items the data list
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyGridScope.items(
+    items: List<T>,
+    crossinline itemContent: @Composable LazyItemScope.(item: T) -> Unit
+) = items(items.size) {
+    itemContent(items[it])
+}
+
+/**
+ * Adds a list of items where the content of an item is aware of its index.
+ *
+ * @param items the data list
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyGridScope.itemsIndexed(
+    items: List<T>,
+    crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
+) = items(items.size) {
+    itemContent(it, items[it])
+}
+
+/**
+ * Adds an array of items.
+ *
+ * @param items the data array
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyGridScope.items(
+    items: Array<T>,
+    crossinline itemContent: @Composable LazyItemScope.(item: T) -> Unit
+) = items(items.size) {
+    itemContent(items[it])
+}
+
+/**
+ * Adds an array of items where the content of an item is aware of its index.
+ *
+ * @param items the data array
+ * @param itemContent the content displayed by a single item
+ */
+inline fun <T> LazyGridScope.itemsIndexed(
+    items: Array<T>,
+    crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
+) = items(items.size) {
+    itemContent(it, items[it])
 }
 
 @Composable
@@ -204,27 +242,13 @@
         return interval.content(scope, localIntervalIndex)
     }
 
-    override fun <T> items(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(item: T) -> Unit
-    ) {
-        intervals.add(items.size) { index ->
-            val item = items[index]
-            @Composable { itemContent(item) }
-        }
-    }
-
     override fun item(content: @Composable LazyItemScope.() -> Unit) {
         intervals.add(1) { @Composable { content() } }
     }
 
-    override fun <T> itemsIndexed(
-        items: List<T>,
-        itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit
-    ) {
-        intervals.add(items.size) { index ->
-            val item = items[index]
-            @Composable { itemContent(index, item) }
+    override fun items(count: Int, itemContent: @Composable LazyItemScope.(index: Int) -> Unit) {
+        intervals.add(count) {
+            @Composable { itemContent(it) }
         }
     }
 }
diff --git a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
index 010d2cb..e4b4751 100644
--- a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
+++ b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
@@ -24,6 +24,7 @@
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Providers
diff --git a/compose/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/lazy/LazyListScrollingBenchmark.kt b/compose/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/lazy/LazyListScrollingBenchmark.kt
index 8e652ac..a61b285 100644
--- a/compose/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/lazy/LazyListScrollingBenchmark.kt
+++ b/compose/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/lazy/LazyListScrollingBenchmark.kt
@@ -25,6 +25,8 @@
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.itemsIndexed
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.emptyContent
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/layout/Layout.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/layout/Layout.kt
index 07e9583..c60f710 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/layout/Layout.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/layout/Layout.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.material.Button
 import androidx.compose.material.Scaffold
 import androidx.compose.material.Surface
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/mentalmodel/MentalModel.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/mentalmodel/MentalModel.kt
index 635fbdf..8f16fb4 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/mentalmodel/MentalModel.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/mentalmodel/MentalModel.kt
@@ -24,6 +24,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.material.Button
 import androidx.compose.material.Checkbox
 import androidx.compose.material.Divider
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/LazyColumnActivity.kt b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/LazyColumnActivity.kt
index d981bab..ed81847 100644
--- a/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/LazyColumnActivity.kt
+++ b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/LazyColumnActivity.kt
@@ -23,6 +23,7 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.material.Card
 import androidx.compose.material.Checkbox
 import androidx.compose.material.Text
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BackdropScaffoldSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BackdropScaffoldSamples.kt
index 0294cad..368287d 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BackdropScaffoldSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BackdropScaffoldSamples.kt
@@ -86,13 +86,13 @@
         },
         backLayerContent = {
             LazyColumn {
-                for (i in 1..5) item {
+                items(5) {
                     ListItem(
                         Modifier.clickable {
-                            selection.value = i
+                            selection.value = it
                             scaffoldState.conceal()
                         },
-                        text = { Text("Select $i") }
+                        text = { Text("Select $it") }
                     )
                 }
             }
@@ -100,9 +100,9 @@
         frontLayerContent = {
             Text("Selection: ${selection.value}")
             LazyColumn {
-                for (i in 1..50) item {
+                items(50) {
                     ListItem(
-                        text = { Text("Item $i") },
+                        text = { Text("Item $it") },
                         icon = { Icon(Icons.Default.Favorite) }
                     )
                 }
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ModalBottomSheetSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ModalBottomSheetSamples.kt
index 7261692..9c63c0e 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ModalBottomSheetSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ModalBottomSheetSamples.kt
@@ -47,9 +47,9 @@
         sheetState = state,
         sheetContent = {
             LazyColumn {
-                for (i in 1..50) item {
+                items(50) {
                     ListItem(
-                        text = { Text("Item $i") },
+                        text = { Text("Item $it") },
                         icon = { Icon(Icons.Default.Favorite) }
                     )
                 }
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeToDismissSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeToDismissSamples.kt
index 87bb647..4a896c29 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeToDismissSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeToDismissSamples.kt
@@ -24,6 +24,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.material.Card
 import androidx.compose.material.DismissDirection.EndToStart
 import androidx.compose.material.DismissDirection.StartToEnd
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/PointerInputDuringSubCompDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/PointerInputDuringSubCompDemo.kt
index 8cdb4b7..03d0312 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/PointerInputDuringSubCompDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/PointerInputDuringSubCompDemo.kt
@@ -67,7 +67,7 @@
                 .size(200.dp)
                 .background(color = Color.White)
         ) {
-            items(List(100) { index -> index }) {
+            items(100) {
                 val pointerCount = remember { mutableStateOf(0) }
 
                 Box(
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/NestedScrollSamples.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/NestedScrollSamples.kt
index 70101f9..224d685 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/NestedScrollSamples.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/NestedScrollSamples.kt
@@ -134,7 +134,7 @@
             ) {
                 // hypothetical scrollable child which we will listen in connection above
                 LazyColumn {
-                    items(listOf(1, 2, 3, 4, 5)) {
+                    items(5) {
                         Text(
                             "Magenta text above will change first when you scroll me",
                             modifier = Modifier.padding(5.dp)
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopOwnerTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopOwnerTest.kt
index 1c5ef6e..9bac865 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopOwnerTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopOwnerTest.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
 import androidx.compose.runtime.ExperimentalComposeApi
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
diff --git a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
index f6b3ac0..e0cddcb 100644
--- a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
+++ b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
@@ -237,7 +237,7 @@
     @Suppress("UNUSED_VARIABLE")
     val recomposerPlaceholder = lazyPagingItems.recomposerPlaceholder.value
 
-    items((0 until lazyPagingItems.itemCount).toList()) { index ->
+    items(lazyPagingItems.itemCount) { index ->
         val item = lazyPagingItems[index]
         itemContent(item)
     }
@@ -265,8 +265,8 @@
     @Suppress("UNUSED_VARIABLE")
     val recomposerPlaceholder = lazyPagingItems.recomposerPlaceholder.value
 
-    items((0 until lazyPagingItems.itemCount).toList()) { index ->
+    items(lazyPagingItems.itemCount) { index ->
         val item = lazyPagingItems[index]
         itemContent(index, item)
     }
-}
\ No newline at end of file
+}