import kotlin.math.abs
class DemoCollections {
}
val systemUsers:MutableList = mutableListOf(1,2,3)
val sudoers:List = systemUsers
fun addSystemUser(newUser:Int)
{
systemUsers.add(newUser)
}
fun getSysSudoers():List
{
return sudoers
}
val openIssues:MutableSet = mutableSetOf("uniqueDescr1", "uniqueDescr2", "uniqueDescr3")
fun addIssue(uniqueDesc:String):Boolean
{
return openIssues.add(uniqueDesc)
}
fun getStatusLog(isAdded:Boolean):String
{
return if(isAdded) "registered correctly." else "marked as duplicate and rejected."
}
const val POINTS_X_PASS:Int = 15
val EZPassAccounts:MutableMap = mutableMapOf(1 to 100,2 to 100,3 to 100)
val EZPassReport:Map = EZPassAccounts
fun updatePointsCredit(accountId:Int)
{
if(EZPassAccounts.containsKey(accountId))
{
println("Updating $accountId")
EZPassAccounts[accountId] = EZPassAccounts.getValue(accountId) + POINTS_X_PASS
}else
{
println("Error:Trying to update a non-existing account (id: $accountId)")
}
}
fun accountsReport()
{
println("EZ-Pass report:")
EZPassReport.forEach{
k, v -> println("ID $k: credit $v")
}
}
data class Person(val name:String,val city:String,val phone:String)
val people = listOf(
Person("John","Boston","+1-888-123456"),
Person("Sarah","Munich","+49-777-789123"),
Person("Svyatoslav","Saint-Petersburg","+7-999-456789"),
Person("Vasilisa","Saint-Petersburg","+7-999-123456"),
)
fun main()
{
val map = mutableMapOf()
println(map.getOrElse("x"){1})
map["x"] = 3
println(map.getOrElse("x"){1})
map["x"] = null
println(map.getOrElse("x"){1})
val list = listOf(0,10,20)
println(list.getOrElse(1){42})
println(list.getOrElse(10){42})
// val A = listOf("a","b","c")
// val B = listOf(1,2,3,4)
// val resultPairs = A zip B
// val resultReduce = A.zip(B)
//
// println("resultPairs: $resultPairs resultReduce:$resultReduce")
// val map = mapOf("key" to 42,"key1" to 11)
//
// val value1 = map["key"]
// val value2 = map["key2"]
// val value3:Int = map.getValue("key")
// println("value1:$value1 value2:$value2 value3:$value3")
//
//
// val mapWithDefault = map.withDefault { k->k.length }
// println("mapWithDefault $mapWithDefault")
//
//
// try {
// map.getValue("anotherkey")
// } catch (e: Exception) {
// TODO("Not yet implemented")
// }
// val shuffled = listOf(5,4,2,1,3,-10)
// val natural = shuffled.sorted()
// val inverted = shuffled.sortedBy{ -it}
// val descending = shuffled.sortedDescending()
// val descendingBy = shuffled.sortedByDescending{ abs(it) }
//
// println(natural)
// println(inverted)
// println(descending)
// println(descendingBy)
// val numbers = listOf(1,2,3)
// val empty = emptyList()
// val only = listOf(3)
//
// println("Numbers: $numbers,min=${numbers.minOrNull()} max=${numbers.maxOrNull()}")
// println("Empty: $empty,min=${empty.minOrNull()} max=${empty.maxOrNull()}")
// println("Only: $only,min=${only.minOrNull()} max=${only.maxOrNull()}")
// val fruitsBag = listOf("apple","orange","banana","grapes")
// val clothesBag = listOf("shirts","pants","jeans")
// val cart = listOf(fruitsBag,clothesBag)
// val mapBag = cart.map{it}
// val flatMapBag = cart.flatMap { it }.sorted()
// println(mapBag)
// println(flatMapBag)
// val numbers = listOf(1,-2,3,-4,5,-6)
// val evenOdd = numbers.partition { it % 2 == 0 }
// val (positives,negatives) = numbers.partition { it > 0 }
//
// println(evenOdd)
// println(positives)
// println(negatives)
// val phoneBook = people.associateBy { it.phone }
// val cityBook = people.associateBy (Person::phone,Person::city)
// val peopleCities = people.groupBy(Person::city,Person::name)
// val lastPersonCity = people.associateBy(Person::city,Person::name)
// println(phoneBook)
// println(cityBook)
// println(peopleCities)
// println(lastPersonCity)
// val totalCount = numbers.count()
// val evenCount = numbers.count{it %2 == 0}
// println(totalCount)
// println(evenCount)
// val words = listOf("foo","bar","baz","faz")
// val empty = emptyList()
// val first = empty.firstOrNull()
// val last = empty.lastOrNull()
//
// val firstF = words.firstOrNull{it.startsWith('f')}
// val firstZ = words.firstOrNull{it.startsWith('z')}
// val lastF = words.lastOrNull{it.startsWith('f')}
// val lastZ = words.lastOrNull{it.startsWith('z')}
//
// println(first)
// println(last)
// println(firstF)
// println(firstZ)
// println(lastF)
// println(lastZ)
// val first = numbers.first()
// val last = numbers.last()
//
// val firstEven = numbers.first{it %2 == 0}
// val lastOdd = numbers.last{it%2 != 0}
// println(firstEven)
// println(lastOdd)
// val words = listOf("Lets","find","something","in","collection","somehow")
// val first = words.find{it.startsWith("some")}
// val last = words.findLast { it.startsWith("some") }
// val nothing = words.find{it.contains("nothing")}
// println(first)
// println(last)
// println(nothing)
// val anyNegative = numbers.any{ it < 0}
// val anyGT6 = numbers.any{ it > 6}
// println(anyNegative)
// println(anyGT6)
//
// val allEven = numbers.all{it %2 == 0}
// val allLess6 = numbers.all{it <6}
// println(allEven)
// println(allLess6)
//
// val allEven1 = numbers.none{it %2 == 1}
// val allLess1 = numbers.none{it > 6}
// println(allEven1)
// println(allLess1)
// val doubled = numbers.map{x -> x*2}
// val tripled = numbers.map{ it*3}
// println(doubled)
// println(tripled)
// val positives = numbers.filter{ x -> x>0}
// val negatives = numbers.filter{it < 0}
// println(positives)
// println(negatives)
// accountsReport()
// updatePointsCredit(1)
// updatePointsCredit(1)
// updatePointsCredit(5)
// accountsReport()
// val aNewIssue:String = "uniqueDescr4"
// val anIssueAlreadyIn:String = "uniqueDescr2"
//
// println("Issue $aNewIssue ${getStatusLog(addIssue(aNewIssue))}")
// println("Issue $anIssueAlreadyIn ${getStatusLog(addIssue(anIssueAlreadyIn))}")
// addSystemUser(4)
// println("Tot sudoers:${getSysSudoers().size}")
// getSysSudoers().forEach{
// i -> println("Some useful info on user $i")
// }
}