• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요 강사님 filter관련 질문이 있습니다.

22.07.30 00:36 작성 조회수 173

0

안녕하세요 강사님 강의 잘듣고 있습니다.

강의를 듣고 filter예제를 변형해가면서 여러가지 요구사항이 들어왔을 경우를 가정해가며 연습을 하고있는데,

해당 경우도 람다로 해결할수 있는지 헷갈리네요.. 

예시를 들어보면서 설명을 해보겠습니다.

fun main() {
    // 같은 쇼핑몰은 3개까지만 가지고 있는다.
    var productList = getItems()
    
      
}

fun getItems() : List<Item> {
    var productList : MutableList<Item> = mutableListOf(
        Item("올리브영", "1"),
        Item("올리브영", "2"),
        Item("무신사", "1"),
        Item("무신사", "2"),
        Item("무신사", "3"),
        Item("무신사", "4"),
        Item("무신사", "5"),
        Item("오늘의집", "1"),
        Item("오늘의집", "2"),
        Item("오늘의집", "3"),
        Item("오늘의집", "4")
    )
    return productList
}


data class Item(
    val shopId: String,
    val productId: String 
)

쇼핑몰명, 상품id를 가지고 있는 객체의 리스트를 가지고 있습니다

그런데 어느날 같은 쇼핑몰은 3개 까지만 가지고 있는다. 요구사항 요청 들어왔습니다. 

이러한 경우도 람다로 조치할수 있는지 궁금하네요..

 

요런 결과를 얻도록 의도하고 있습니다.

    var productList : MutableList<Item> = mutableListOf(
        Item("올리브영", "1"),
        Item("올리브영", "2"),
        Item("무신사", "1"),
        Item("무신사", "2"),
        Item("무신사", "3"),
        Item("오늘의집", "1"),
        Item("오늘의집", "2"),
        Item("오늘의집", "3"),

혹시 좋은 방안을 얻을수 있을것 같아서 질문 요청드립니다. 

감사합니다!

답변 2

·

답변을 작성해보세요.

2

안녕하세요~ 코딩고수가되고싶어요님!! 크으~~ 여러 가지 요구사항을 변형해보시며 연습하시는게 너무너무 좋네요 ㅎㅎㅎ

 

"그런데 어느날 같은 쇼핑몰은 3개 까지만 가지고 있는다. 요구사항 요청"

같은 경우는 단일 filter로는 어려울 것 같습니다~ filter는 개수와 무관하게 '특정 조건을 만족하는 Item'만 골라주니까요!

하지만~ 두 가지 기능을 조합하면 가능합니다!

먼저 filter를 이용해 특정 조건을 만족하는 Item만 골라낸다음 .take(숫자) 라는 기능을 사용해서 최초 N개만 가져올 수 있습니다 ㅎㅎㅎ (만약 N개보다 적으면 있는 만큼 가져옵니다!)

 

이런 요구사항을 조금 더 일반화해서~ 각 이름별로 3개씩만 모두 고르고 싶다고 한다면

다음과 같이 groupBy + map + take + flatten을 조합할 수도 있습니다 ㅎㅎㅎㅎ

(연이은 기능을 확인할 때는 단계별로 값을 확인해보시면 이해에 큰 도움이 되실거에요~!)

 

혹시 더 궁금한것 있으시면 질문 편하게 부탁드려요~

감사합니다!! 좋은 하루 되세요 ㅎㅎㅎ

 

0

강사님 빠른 답변 감사합니다.

map을 저렇게도 활용이 가능했군요,.,!! 

 

mapIdexed에서 인자를 2개쓸때는 순서의 값을 가지기 위해서 사용했었는데,

 

map을 (인자1, 인자2) 이런 표현은 

 

인자1(name)은 groupBy에 의해서 출력된(?) key값을 의미하고,

인자2(people)는 각 key에 해당하는 people인스턴스를 의미하고 있는것으로 보이는데 맞는 표현일까요??

네네 정확하십니다!! Map에 있는 (key, value)가 그대로 (name, people)에 들어간것이 맞습니다!

여기서 key는 String 타입이고 value는 List<Person> 타입이 됩니다!

답변 감사합니다. 도움정말 많이 되었네요!! 다음강의도 기대하겠습니다 :)

ㅎㅎㅎ 도움이 되었다니 너무 뿌듯하네요~!! 감사합니다!!! 잘 준비해 보겠습니다! 😊