Refactor finding needles to be better readable
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 18 Oct 2017 04:49:51 +0000 (06:49 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 18 Oct 2017 04:49:51 +0000 (06:49 +0200)
src/main/kotlin/net/pterodactylus/sone/web/pages/SearchPage.kt

index 02d63c5..69b7c85 100644 (file)
@@ -106,15 +106,12 @@ class SearchPage @JvmOverloads constructor(template: Template, webInterface: Web
                return requiredHits * 3 + optionalHits + (requiredHits - requiredPhrases) * 5 - (forbiddenHits * 2)
        }
 
-       private fun String.findAll(needle: String): List<Int> {
-               var nextIndex = indexOf(needle)
-               val positions = mutableListOf<Int>()
-               while (nextIndex != -1) {
-                       positions += nextIndex
-                       nextIndex = indexOf(needle, nextIndex + 1)
-               }
-               return positions
-       }
+       private fun String.findAll(needle: String) =
+                       generateSequence(indexOf(needle).takeIf { it > -1 }) { lastPosition ->
+                               lastPosition
+                                               .let { indexOf(needle, it + 1) }
+                                               .takeIf { it > -1 }
+                       }.toList()
 
        private fun String.parse() =
                        StringEscaper.parseLine(this)