Мне нужно по заданному списку слов определить, содержит ли он анаграммы. Например:
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)?





В words.map вы разбиваете каждое данное предложение на список слов, а затем для каждого из этого списка вы проверяете, все ли элементы в этом списке находятся в этом списке, что всегда верно. В этом примере нет смысла использовать foreach. Он возвращает Unit, который похож на void в java.
Может быть, вы хотели что-то вроде этого?
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