2017-06-13 93 views
1

我希望我的代码从包含重复内容的现有ArrayList(pinyinArrayList)创建唯一项目的ArrayList(uniquePinyinArrayList)。在ArrayList中创建唯一项目的ArrayList

的“的println”命令不执行(我认为当重复从pinyinArrayList在uniquePinyinArrayList发现他们应该做的)

fun uniquePinyinArray(pinyinArrayList: ArrayList<String>) { 
    val uniquePinyinArrayList = ArrayList<String>() 
    for(currentPinyin in pinyinArrayList){ 
     if (currentPinyin in uniquePinyinArrayList){ 
      // do nothing 
      println("already contained"+currentPinyin) 
      println("uniquePinyin"+uniquePinyinArrayList) 
     } 
     else { 
      uniquePinyinArrayList.add(currentPinyin) 
     } 
    } 
} 

我也曾尝试

if (uniquePinyinArrayList.contains(currentPinyin)){ 

,虽然这也没有奏效。

编辑: 这个方法实际上是从我的源单词列表中的每个单词运行的,因此创建了多个ArrayList。为了解决这个问题,我在这个循环之外为uniquePinyin创建了一个单独的ArrayList对象。事情现在按预期工作!

+0

回到原来的问题,为什么你的代码不工作 - 不知道,它打印已包含的语句正如我所预期的那样。 – zsmb13

+0

编辑我的问题来解释为什么 - 哎呀! – Idios

回答

5

退房distinct()功能,它会为你做这一切!

fun main(args: Array<String>) { 
    val listOfThings = listOf("A", "B", "C", "A", "B", "C") 
    val distinctThings = listOfThings.distinct() 

    println(listOfThings) // [A, B, C, A, B, C] 
    println(distinctThings) // [A, B, C] 
} 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/distinct.html

+0

谢谢,会用这个来清理我的代码!但是,我意识到问题所在,并编辑了我的问题来澄清。 – Idios

1

你可以把你的数组列表进行设置。

Set<String> foo = new HashSet<String>(pinyinArrayList);