Java 如何根据条件对数组项进行分组而不返回键?
我目前需要通过删除联系人的电话号码来过滤联系人的电话号码,如果出于呼叫ID的目的,这些号码是相同的 例如:-> 在这样的数组中[+911234567812345678,+9112345678999999] +91 12345678与12345678相同,12345678与+91 12345678相同 所以这里的输出应该是[+9112345678999999] 我尝试使用kotlin为分组元素提供的各种group/groupby方法,但所有这些方法都需要一个键。目前没有一个特定的键可以将所有电话号码分组。我显然可以创建多个循环并解决这个问题,但我想看看是否有更干净的方法来解决这个问题 您可以使用:Java 如何根据条件对数组项进行分组而不返回键?,java,kotlin,Java,Kotlin,我目前需要通过删除联系人的电话号码来过滤联系人的电话号码,如果出于呼叫ID的目的,这些号码是相同的 例如:-> 在这样的数组中[+911234567812345678,+9112345678999999] +91 12345678与12345678相同,12345678与+91 12345678相同 所以这里的输出应该是[+9112345678999999] 我尝试使用kotlin为分组元素提供的各种group/groupby方法,但所有这些方法都需要一个键。目前没有一个特定的键可以将所有电话号
创建NormalizedPhoneNumber类,该类包装电话号码字符串并对其进行规范化,即删除+91前缀和所有空格,并基于规范化结果实现equals和hashCode。然后将所有电话号码转换为NormalizedPhoneNumber的实例,并将其存储在哈希集中。好了:哈希集已经消除了所有重复项。
val list = listOf("+91 12345678","12345678","+91 123 456 78","99999999")
val output = list.distinctBy {
it.replace(" ", "") // Remove whitespace
// TODO also add the +91 prefix if it is not already there
}