如何删除连续位置的所有重复项?

Sam*_*wal 5 java kotlin

我希望能够删除所有重复项(如果它们位于数组中的连续位置)。例如,我有这个数组:

[1,2,2,3,2,5,1,1,6,1]
Run Code Online (Sandbox Code Playgroud)

现在,我想删除所有位于相同位置的重复项。最后,删除元素后,最终的数组将如下所示:

[1,2,3,2,5,1,6,1]
Run Code Online (Sandbox Code Playgroud)

显然,我们可以看到,如果它位于下一个位置,我们就会将其删除。

注意:我不希望只使用整数。我希望它适用于所有对象。另外,我不想删除所有重复项。仅当其处于以下位置时才将其拆下。

理想情况下,我想就地执行此操作,而不是创建新数组。

那么,我如何使用来实现这一点。

luk*_*s.j 5

val list = listOf(1, 2, 2, 3, 2, 5, 1, 1, 6, 1)

val result = list.filterIndexed { index, i -> 
  if (index > 0) i != list[index - 1] else true
  // or: if (index < list.size - 1) i != list[index + 1] else true
}

println(result)
Run Code Online (Sandbox Code Playgroud)

编辑,对于标量类型和数据类:

fun <T : Any> List<T>.filterConsecutiveDuplicates() =
  filterIndexed { index, i -> if (index < size - 1) i != this[index + 1] else true }

val list = listOf(1, 2, 2, 3, 2, 5, 1, 1, 6, 1)
val list2 = list.filterConsecutiveDuplicates()

data class O(val name: String)
val objects = listOf(O("A"), O("A"), O("B"), O("A"), O("B"), O("C"), O("C"), O("A"))
val objects2 = objects.filterConsecutiveDuplicates()
Run Code Online (Sandbox Code Playgroud)