새소식

반응형
250x250
My Study/Kotlin

Study About Kotlin 10

  • -
728x90
반응형

먼저 사용할 class 정의

data class Fruit( val id : Long, val name: String, val factoryPrice : Long, val currentPrice : Long ) val fruits = listOf(Fruit(1, "바나나", 2000L, 1500L), Fruit(2, "바나나", 2000L, 1500L), Fruit(3, "사과", 1500L, 1200L), Fruit(4, "사과", 1200L, 1000L), Fruit(5, "사과", 1700L, 1600L), Fruit(6, "사과", 2000L, 1700L), Fruit(7, "귤", 1000L, 500L))

 

사과의 가격들을 알고싶을 때

val apples = fruits.filter { fruit -> fruit.name == "사과" }

 

Index가 필요할 시

val apples1 = fruits.filterIndexed { idx, fruit -> println(idx); fruit.name == "사과" }

 

사과의 가격들을 알려줘야 하는 경우(map에서 index가 필요한 경우 위와 비슷하게 mapIndexed로 가능하다.)

매핑 결과가 null이 아닌 것만 가져오고 싶을 때에는 mapNotNull로 사용도 가능하다.

val applePrices = fruits.filter { fruit -> fruit.name == "사과" } .map { fruit -> fruit.currentPrice }

 

모든 과일이 사과인지 확인할 때에는 all을 사용한다.

(all = 전체가 true여야 true , none = 전체가 false여야 true, any = 조건을 하나라도 만족하면 true)

val isAllApple = fruits.all { fruit -> fruit.name == "사과" }

 

출고가 10,000원 이상의 과일이 하나라도 있는지?

val isUnderPrice = fruits.any {fruit -> fruit.factoryPrice >= 10_000}

 

총 과일의 개수를 알고싶을 때

val fruitCount = fruits.count()

 

낮은 가격순으로 보여줄 때에는 sortedBy, sortedByDescending(내림차순)

val fruitCount1 = fruits.sortedBy { fruit -> fruit.currentPrice }

 

과일의 종류를 확인할 때(중복 제거)

val distinctFruitNames = fruits.distinctBy { fruit -> fruit.name } .map { fruit -> fruit.name }

 

리스트의 첫번째 혹은 마지막이 필요할 때

fruits.first() fruits.last()

 

list 를 map으로 바꾸는 여러가지 방법

// 과일 이름이 key val map: Map<String, List<Fruit>> = fruits.groupBy { fruit -> fruit.name } // 중복되지 않는 key로 map을 만들 때 associateBy 사용 val map1: Map<Long, Fruit> = fruits.associateBy { fruit -> fruit.id } // key = 과일이름, value = 과일의 출고가 val map2: Map<String, List<Long>> = fruits .groupBy({fruit -> fruit.name}, {fruit -> fruit.factoryPrice}) // key = 사과 val map3: Map<String, List<Fruit>> = fruits.groupBy { fruit -> fruit.name} .filter { (key, value) -> key == "사과" }

 

list 속 list에서 출고가와 현재가가 같은 것 리스트로 뽑기

val fruitsInList: List<List<Fruit>> = listOf( listOf( Fruit(3, "사과", 1500L, 1200L), Fruit(4, "사과", 1200L, 1000L), Fruit(5, "사과", 1700L, 1600L), Fruit(6, "사과", 2000L, 1700L), ), listOf( Fruit(1, "바나나", 2000L, 1500L), Fruit(2, "바나나", 2000L, 1500L), ), listOf( Fruit(7, "귤", 1000L, 500L) ) ) val samePriceFruits = fruitsInList.flatMap { list -> list.filter { fruit -> fruit.factoryPrice == fruit.currentPrice } }
728x90
반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.