title: Compose: LazyColumn recomposes all items on single item update
body: <p>I am trying to show a list of Orders in a list using LazyColumn. Here is the code:</p>
  <pre><code>@Composable
  private fun MyOrders(
      orders: List&lt;Order&gt;?,
      onClick: (String, OrderStatus) -&gt; Unit
  ) {
      orders?.let {
          LazyColumn {
              items(
                  items = it,
                  key = { it.id }
              ) {
                  OrderDetails(it, onClick)
              }
          }
      }
  }
  
  @Composable
  private fun OrderDetails(
      order: Order,
      onClick: (String, OrderStatus) -&gt; Unit
  ) {
      println(&quot;Composing Order Item&quot;)
      // Item Code Here
  }
  </code></pre>
  <p>Here is the way, I call the composable:</p>
  <pre><code>orderVm.fetchOrders()
  val state by orderVm.state.collectAsState(OrderState.Empty)
  
  if (state.orders.isNotEmpty()) {
      MyOrders(state.orders) {
          // Handle status change click listener
      }
  }
  </code></pre>
  <p>I fetch all my orders and show in the LazyColumn. However, when a single order is updated, the entire LazyColumn gets rrecomposed. Here is my ViewModel looks like:</p>
  <pre><code>class OrderViewModel(
      fetchrderUseCase: FetechOrdersUseCase,
      updateStatusUseCase: UpdateorderUseCase
  ) {
  
      val state = MutableStateFlow(OrderState.Empty)
  
      fun fetchOrders() {
          fetchrderUseCase().collect {
              state.value = state.value.copy(orders = it.data)
          }
      }
  
      fun updateStatus(newStatus: OrderStatus) {
          updateStatusUseCase(newStatus).collect {
              val oldOrders = status.value.orders
              status.value = status.value.copy(orders = finalizeOrders(oldOrders))
          }
      }
  }
  </code></pre>
  <p>NOTE: The <code>finalizeOrders()</code> does some list manipulation based on orderId to update one order with the updated one.</p>
  <p>This is how my state looks like:</p>
  <pre><code>data class OrderState(
      val orders: List&lt;Order&gt; = listOf(),
      val isLoading: Boolean = false,
      val error: String = &quot;&quot;
  ) {
      companion object {
          val Empty = FetchOrdersState()
      }
  }
  </code></pre>
  <p>If I have 10 orders in my DB and I update one's status (let's say 5th item), then <code>OrderDetails</code> gets called for 20 times. Not sure why. Caan I optimize it to make sure only the 5th indexed item will be recomposed and the <code>OrderDetals</code> gets called only with the new order.</p>