如果它们在数组中的连续位置,我希望能够删除所有重复项。例如,我有这个数组:
[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/