참조: 유튜브 디모의 코틀린
코드테스트사이트:play.kotlinlang.org
단축키(맥북):
맥북 스크린샷 바로 클립보드에 붙여넣기
-control+command+shift+3 or 4(3은 전체화면, 4는 마우스로 지정한 영역, 4일때 스페이스바 누르면 창캡처가능)
화면에 분할해놓은 창끼리 이동
-command+'
한 창에서 탭끼리 이동
-command+shift+{/}
//나머지 컬렉션 함수
//좀 더 복잡한 기능들
//<associatdBy
//아이템에서 key를 추출하여 map으로 변환하는 함수
//예를 들어 이름과 태어난 년도가 들어간 person객체들이 있고
// ex. 시아/2003, 유나/2001, 하은/2003
// 이를 리스트에 넣어뒀을때
// 이름을 키로 하고 객체를 value로 하는 map으로 변경하려면
//ex. collecton.associateBy{it.name}
// //associateBy의 중괄호 안에 key로 사용할 속성(여기선 이름)을
// 넣어주면 자동으로 키와 값이 짝지어진 map으로 변환하여준다
//<groupBy
//key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수
//특정한 값을 키로 지정하여 해당값을 가진 객체끼리 묶은 배열을 value로 하는
// map을 만들어줌
//ex. 2001 키에는 [유나,2001] 배열
// 2003 키에는 [시아,2001][하은,2001] 배열
//<partition
//아이템에 조건을 걸어 두개의 컬렉션으로 나누어줌
//조건에 따른 true/false 두개로 나뉨
//ex. collection.partition{it.birthYear>2002}
// list([시아,2003],[하은,2003]),list([유나,2001])
// 이 두 컬렉션은 두 객체(컬렉션을 개체로 간주)를 담을 수 있는
// Pair라는 클래스객체로 반환되므로
// 각각의 컬렉션을 first,second로 참조하여 사용하면 됨
// 또는 pair를 직접 받아줄수 있도록
// val(over2002,under2002)=
// collection.partition{it.birthYear>2002}
// 이런식으로 변수 이름을 괄호 안에 두개 선언해주면
// 각 컬렉션을 지정한 변수 이름으로 받을 수 있다
// val over2002=([시아,2003],[하은,2003])
// val under2002=([유나,2001])
<실행결과 텍스트>
{1992=Person(name=유나, birthYear=1992), 1996=Person(name=조이, birthYear=1996), 1999=Person(name=츄, birthYear=1999), 2003=Person(name=유나, birthYear=2003)}
{유나=[Person(name=유나, birthYear=1992), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1996)], 츄=[Person(name=츄, birthYear=1999)]}
[Person(name=유나, birthYear=1992), Person(name=조이, birthYear=1996)]
[Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
fun main(){
data class Person(val name:String,val birthYear:Int)
//data class를 만들고 이름과 태어난 년도 받음
val personList=listOf(Person("유나",1992),
Person("조이",1996),
Person("츄",1999),
Person("유나",2003))
//리스트에 네명의 Person객체 넣음
println(personList.associateBy{it.birthYear})
//associateBy로 person객체의 년도를 기준으로 map만들어 출력
println(personList.groupBy{it.name})
//groupBy로 person객체의 이름을 기준으로 묶어 map만들어 출력
val(over98,under98)
=personList.partition{it.birthYear<1998}
println(over98)
println(under98)
//partition에서 person 객체의 년도가 1998보다 큰지 비교하여
//리스트 나눔
}
//<flatMap
//아이템마다 만들어진 컬렉션을 합쳐서 반환하는 함수
//중괄호 안에서 아이템마다 새로운 컬렉션을 생성하면
//이를 합쳐서 하나의 컬렉션으로 반환해줌
//ex. 2와 3 있는 컬렉션 있다고 가정
// collection.flatMap{
// listOf(it*3,it+3)
// }
// 6,9 컬렉션과 5,6 컬렉션 합쳐서
// 6,5,9,6 컬렉션으로 반환
//<getOfElse
//인덱스 위치에 아이템이 있으면 아이템을 반환하고
//아닌 경우 지정한 기본값을 반환하는 함수
//ex. collection.getOrElse(8){50}
// //index 8 에 값 있으면 아이템반환, 없으면 중괄호 안의 기본값인 50반환
//<zip
//컬렉션 두 개의 아이템을 1:1로 매칭하여 새 컬렉션을 만들어줌
//1대1로 pair 클래스의 객체로 만들어 list에 넣어 반환해줌
//ex. a,b,c,d 컬렉션
// 1,2,3,4 컬렉션
// 하나의 리스트에 A,1 pair class
// B,2 pair class
// C,3 pair class
// D,4 pair class 객체들이 있음
// 이때, 결과 리스트의 아이템의 개수는 더 작은 컬렉션 따라감
fun main(){
val numbers=listOf(-3,7,2,-10,1)
//정수값 여러개 가진 numbers리스트 만듦
println(numbers.flatMap{listOf(it*10,it+10)})
//리스트에 flatMap 적용하여 개별아이템에 곱하기10 더하기 10한 리스트를
//새로 만들어 출력
println(numbers.getOrElse(1){50})
println(numbers.getOrElse(10){50})
//getOrElse함수 사용하여 index 1번 아이템 없는 경우 50,
//inde 10번 아이템 없는 경우에도 50반환하도록 각각 출력
val names=listOf("A","B","C","D")
//abcd 들어간 list만듦
println(names zip numbers)
//names와 numbers를 zip하여 출력
//이때 numbers의 숫자 1은 짝이 맞지 않으므로 제외됨
}
//컬렉션 함수는 데이터의 조작을 더 수월하게 만들 수 있는 다양한 기능을 갖고있으므로
//컬렉션에 담긴 데이터를 다룰 때 이용하면 좋다
'코틀린 문법' 카테고리의 다른 글
22. 비트연산 (0) | 2023.06.04 |
---|---|
21. 변수의 다양한 사용방법 (0) | 2023.06.03 |
19. 컬렉션함수(1) (0) | 2023.06.03 |
18. Set과 Map (0) | 2023.05.31 |
17. Data Class와 Enum Class (1) | 2023.05.14 |