この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
毎日Kotlinシリーズです。
このシリーズを初めての方はこちらです。「毎日Kotlin」はじめました | Developers.IO
問題
Get used to new style | Try Kotlin
Rewrite the following Java function to Kotlin.
public Collection<String> doSomethingStrangeWithCollection(
Collection<String> collection
) {
Map<Integer, List<String>> groupsByLength = Maps.newHashMap();
for (String s : collection) {
List<String> strings = groupsByLength.get(s.length());
if (strings == null) {
strings = Lists.newArrayList();
groupsByLength.put(s.length(), strings);
}
strings.add(s);
}
int maximumSizeOfGroup = 0;
for (List<String> group : groupsByLength.values()) {
if (group.size() > maximumSizeOfGroup) {
maximumSizeOfGroup = group.size();
}
}
for (List<String> group : groupsByLength.values()) {
if (group.size() == maximumSizeOfGroup) {
return group;
}
}
return null;
}
fun doSomethingStrangeWithCollection(collection: Collection<String>): Collection<String>? {
val groupsByLength = collection. groupBy { s -> TODO() }
val maximumSizeOfGroup = groupsByLength.values.map { group -> TODO() }.max()
return groupsByLength.values.firstOrNull { group -> TODO() }
}
狙い
ここで考えて欲しい問題の意図はなんだろうか?
今日は総復習です。わからないところはもう一度見直しましょう。
解答例
fun doSomethingStrangeWithCollection(collection: Collection<String>): Collection<String>? {
val groupsByLength = collection.groupBy { s -> s.length }
val maximumSizeOfGroup = groupsByLength.values.map { group -> group.size }.max()
return groupsByLength.values.firstOrNull { group -> group.size == maximumSizeOfGroup }
}
- [毎日Kotlin] Day29. Group By
- [毎日Kotlin] Day24. Filter; map
- [毎日Kotlin] Day25. All, Any and other predicates
こちらを見返してみましょう!
あとがき
Day34.でまたお会いしましょう。