코틀린

[Collection] forEach, map, maxByOrNull

란서 2021. 8. 27. 21:02

0. 참조

https://programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

 

  1. Collection > Map // MutableMap
    Map // MutableMap 은 key , value 쌍으로 이루어진 자료구조로 key를 참조하여 value를 찾아내는 자료구조이다.
    Map은 불변, MutableMap은 가변이다. 따라서 Map은 읽기만 가능, Mutable은 읽기/쓰기 모두 가능 따라서 put 가능

  2. Collections.forEach { E -> () } : Collection의 모든 원소를 참조해가며 함수 사용. 
  3. Collections.map ( transform : (Entry<K,V> -> R) : transform 함수의 내용을 원소들에 적용시키고 리스트로 반환
    val numbers = listOf(1, 2, 3)
    println(numbers.map { it * it }) // [1, 4, 9]​
  4. Collections.maxByOrNull { selector : (Entry <K,V> -> R)} : 주어진 람다식에서 부합하는 가장 큰 값을 가진 자료형을 반환. 없다면 null을 반환
    val nameToAge = listOf("Alice" to 42, "Bob" to 28, "Carol" to 51)
    val oldestPerson = nameToAge.maxByOrNull { it.second }
    println(oldestPerson) // (Carol, 51)
    
    val emptyList = emptyList<Pair<String, Int>>()
    val emptyMax = emptyList.maxByOrNull { it.second }
    println(emptyMax) // null​


  5. List<T>.joinToString(separator = "," , prefix="", postfix="", limit : Int =-1, truncated = "...",
    transform ((T)->CharSequence)?=null) :
      리스트의 각 원소들을 separator를 껴넣어 String으로 반환
  6. comb.forEach { it:List<Char> -> val setMenu = it.joinToString("") if (!map.containsKey(setMenu)) map.put(setMenu, 1) else map[setMenu] = map[setMenu]!! + 1 }