Skip to content

Commit 2c82184

Browse files
Optimize bookutils (#149)
1 parent ead3c0a commit 2c82184

File tree

1 file changed

+31
-44
lines changed

1 file changed

+31
-44
lines changed

app/src/main/java/com/starry/myne/utils/book/BookUtils.kt

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,18 @@ import com.starry.myne.repo.models.Author
2020
import java.util.Locale
2121

2222
object BookUtils {
23+
24+
/**
25+
* Converts the list of authors into a single string.
26+
*
27+
* @param authors List of authors.
28+
* @return String representation of the authors.
29+
*/
2330
fun getAuthorsAsString(authors: List<Author>): String {
24-
return if (authors.isNotEmpty()) {
25-
var result: String
26-
if (authors.size > 1) {
27-
result = fixAuthorName(authors.first().name)
28-
authors.slice(1 until authors.size).forEach { author ->
29-
if (author.name != "N/A")
30-
result += ", ${fixAuthorName(author.name)}"
31-
}
32-
} else {
33-
result = fixAuthorName(authors.first().name)
34-
}
35-
result
36-
} else {
31+
return if (authors.isEmpty()) {
3732
"Unknown Author"
33+
} else {
34+
authors.joinToString(", ") { fixAuthorName(it.name) }
3835
}
3936
}
4037

@@ -43,44 +40,34 @@ object BookUtils {
4340
* reversed, where first name and last are separated by a comma
4441
* Eg: "Fyodor Dostoyevsky" becomes "Dostoyevsky, Fyodor", This
4542
* function fixes that and returns name in correct format.
43+
*
44+
* @param name Name of the author.
45+
* @return Name of the author in correct format.
4646
*/
4747
private fun fixAuthorName(name: String): String {
48-
val reversed = name.split(",").reversed()
49-
return reversed.joinToString(separator = " ") {
50-
return@joinToString it.trim()
51-
}
48+
return name.split(",").reversed().joinToString(" ") { it.trim() }
5249
}
5350

51+
/**
52+
* Converts the list of languages into a single string.
53+
*
54+
* @param languages List of languages.
55+
* @return String representation of the languages.
56+
*/
5457
fun getLanguagesAsString(languages: List<String>): String {
55-
var result = ""
56-
languages.forEachIndexed { index, lang ->
57-
val loc = Locale(lang)
58-
if (index == 0) {
59-
result = loc.displayLanguage
60-
} else {
61-
result += ", ${loc.displayLanguage}"
62-
}
63-
}
64-
return result
58+
return languages.joinToString(", ") { Locale(it).displayLanguage }
6559
}
6660

61+
/**
62+
* Converts the list of subjects into a single string.
63+
*
64+
* @param subjects List of subjects.
65+
* @param limit Maximum number of subjects to show.
66+
* @return String representation of the subjects.
67+
*/
6768
fun getSubjectsAsString(subjects: List<String>, limit: Int): String {
68-
val allSubjects = ArrayList<String>()
69-
// strip "--" from subjects.
70-
subjects.forEach { subject ->
71-
if (subject.contains("--")) {
72-
allSubjects.addAll(subject.split("--"))
73-
} else {
74-
allSubjects.add(subject)
75-
}
76-
}
77-
val truncatedSubs: List<String> = if (allSubjects.size > limit) {
78-
allSubjects.toSet().toList().subList(0, limit)
79-
} else {
80-
allSubjects.toSet().toList()
81-
}
82-
return truncatedSubs.joinToString(separator = ", ") {
83-
return@joinToString it.trim()
84-
}
69+
val allSubjects = subjects.flatMap { it.split("--") }.map { it.trim() }.toSet()
70+
val truncatedSubs = if (allSubjects.size > limit) allSubjects.take(limit) else allSubjects
71+
return truncatedSubs.joinToString(", ")
8572
}
8673
}

0 commit comments

Comments
 (0)