如何在Kotlin中使用forEach将商品与所有其他商品进行比较?

时间:2019-01-19 18:35:24

标签: kotlin

我需要一个给定的单词列表来确定它是否包含字谜。 例如:

hasAnagrams(listOf("restful", "elvis", "fluster")) -> true
hasAnagrams(listOf("restful", "elvis", "real")) -> false

我的代码:

fun hasAnagrams(words: List<String>): Boolean =
words.map { it.split(" ") }.forEach { item -> return item.containsAll(item) }

我的代码返回一个单位,但我不知道如何返回布尔值,这使得代码简短,简洁且习惯上正确。另外,我不知道使用.forEach是否值得,或者是否有更正确的方法可以使用此操作。我是否正确item -> return item.containsAll(item)写下了这一行?

1 个答案:

答案 0 :(得分:1)

在words.map中,将给定的句子中的每个句子都分成单词列表,然后针对此列表中的每个列表,检查此列表中的所有元素是否都在此列表中,这始终是真的。 在此示例中,使用foreach没有意义。它返回Unit,就像Java中的void。

也许您想要这样吗?

fun hasAnagrams(words: List<String>): Boolean = words
    .map { it.split("").sorted() } // split given words into list of chars and sort
    .distinct() // get only unique lists
    .size != words.size // check if number of unique lists is equal to number of words in input list