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

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

[1,2,2,3,2,5,1,1,6,1]

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

[1,2,3,2,5,1,6,1]

很明显,如果它在下一个位置,我们可以看到我们正在删除它。

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

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

那么,我怎样才能用 java 实现呢?或 kotlin .

最佳答案

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)

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

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()

https://stackoverflow.com/questions/72508803/

相关文章:

java - 为什么 LocalDateTime.ofInstant() 需要 ZoneId

c++ - 将不同枚举类类型作为输入的函数,怎么样?

oop - 理解对象交互的一些技巧是什么

.net - Session.Timeout 和 Server.ScriptTimeout 有什么区

csv - 使用 Sed、Awk 等将第一列中每一行的数据复制到最后一列中的 html 超链接中

c - 为什么 putchar(1 +'0' ) 不输出 10?

c# - 等待似乎没有按顺序执行

amazon-ec2 - 一个 Amazon EC2 实例可以服务多少用户?

r - 在整个数据帧上使用 ifelse()

c# - 我如何编写介于两个值之间的 if 语句?