From Java To Kotlin - Your Cheat Sheet For Java To Kotlin
Hi, I am Amit Shekhar, Founder @ Outcome School • IIT 2010-14 • I have taught and mentored many developers, and their efforts landed them high-paying tech jobs, helped many tech companies in solving their unique problems, and created many open-source libraries being used by top companies. I am passionate about sharing knowledge through open-source, blogs, and videos.
- AI and Machine Learning
- Android
Join Outcome School and get a high-paying tech job: Outcome School
I conducted a live session on "Android Developer Interview Preparation for Product-based Companies"
Interacted with over 500 Android Developers.
Guided, motivated, and inspired them to aim higher and achieve more.
Recording Link: https://drive.google.com/file/d/1VWW3l_itH6vYbNYzNer6XW5_x0jzOF4O/view?usp=sharing
Document Link: https://docs.google.com/document/d/14UdD7Gd1j3no583ALx2t2Ggt3G_CECYhenLE-m-bkzA/edit?usp=sharing
Java
System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");Kotlin
print("Amit Shekhar")
println("Amit Shekhar")Java
Stringname = "Amit Shekhar";
finalStringname = "Amit Shekhar";Kotlin
var name ="Amit Shekhar"val name ="Amit Shekhar"Java
StringotherName;
otherName = null;Kotlin
var otherName :String?
otherName =nullJava
if (text != null) {
intlength = text.length();
}Kotlin
text?.let {
val length = text.length
}
// or simplyval length = text?.lengthJava
StringsampleString = "Shekhar";
if (!sampleString.isEmpty()) {
myTextView.setText(sampleString);
}
if(sampleString!=null && !sampleString.isEmpty()){
myTextView.setText(sampleString); }Kotlin
var sampleString ="Shekhar"if(sampleString.isNotEmpty()){ //the feature of kotlin extension function
myTextView.text=sampleString
}
if(!sampleString.isNullOrEmpty()){
myTextView.text=sampleString }Java
StringfirstName = "Amit";
StringlastName = "Shekhar";
Stringmessage = "My name is: " + firstName + " " + lastName;Kotlin
var firstName ="Amit"var lastName ="Shekhar"var message ="My name is: $firstName$lastName"Java
Stringtext = "First Line\n" +
"Second Line\n" +
"Third Line";Kotlin
val text =""" |First Line |Second Line |Third Line""".trimMargin()Java
Stringstr = "Java to Kotlin Guide";
Stringsubstr = "";
//print javasubstr = str.substring(0, 4);
System.out.println("substring = " + substr);
//print kotlinsubstr = str.substring(8, 14);
System.out.println("substring = " + substr);Kotlin
var str ="Java to Kotlin Guide"var substr =""//print java
substr = str.substring(0..3) //println("substring $substr")
//print kotlin
substr = str.substring(8..13)
println("substring $substr")Java
Stringtext = x > 5 ? "x > 5" : "x <= 5";
Stringmessage = null;
log(message != null ? message : "");Kotlin
val text =if (x >5) "x > 5"else"x <= 5"val message:String?=null
log(message ?:"")Java
finalintandResult = a & b;
finalintorResult = a | b;
finalintxorResult = a ^ b;
finalintrightShift = a >> 2;
finalintleftShift = a << 2;
finalintunsignedRightShift = a >>> 2;Kotlin
val andResult = a and b
val orResult = a or b
val xorResult = a xor b
val rightShift = a shr 2val leftShift = a shl 2val unsignedRightShift = a ushr 2Java
if (objectinstanceofCar) {
Carcar = (Car) object;
}Kotlin
if (objectis Car) {
var car =objectas Car
}
// if object is nullvar car =objectas? Car // var car = objectas Car?Java
if (objectinstanceofCar) {
Carcar = (Car) object;
}Kotlin
if (objectis Car) {
var car =object// smart casting
}
// if object is nullif (objectis Car?) {
var car =object// smart casting, car will be null
}Java
if (score >= 0 && score <= 300) { }Kotlin
if (score in0..300) { }Java
intscore = // some score;Stringgrade;
switch (score) {
case10:
case9:
grade = "Excellent";
break;
case8:
case7:
case6:
grade = "Good";
break;
case5:
case4:
grade = "OK";
break;
case3:
case2:
case1:
grade = "Fail";
break;
default:
grade = "Fail"; }Kotlin
var score =// some scorevar grade =when (score) {
9, 10->"Excellent"in6..8->"Good"4, 5->"OK"else->"Fail"
}Java
for (inti = 1; i <= 10 ; i++) { }
for (inti = 1; i < 10 ; i++) { }
for (inti = 10; i >= 0 ; i--) { }
for (inti = 1; i <= 10 ; i+=2) { }
for (inti = 10; i >= 0 ; i-=2) { }
for (Stringitem : collection) { }
for (Map.Entry<String, String> entry: map.entrySet()) { }Kotlin
for (i in1..10) { }
for (i in1 until 10) { }
for (i in10 downTo 0) { }
for (i in1..10 step 2) { }
for (i in10 downTo 0 step 2) { }
for (item in collection) { }
for ((key, value) in map) { }Java
finalList<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);
finalMap<Integer, String> keyValue = newHashMap<Integer, String>();
map.put(1, "Amit");
map.put(2, "Anand");
map.put(3, "Messi");
// Java 9finalList<Integer> listOfNumber = List.of(1, 2, 3, 4);
finalMap<Integer, String> keyValue = Map.of(1, "Amit",
2, "Anand",
3, "Messi");Kotlin
val listOfNumber =listOf(1, 2, 3, 4)
val keyValue =mapOf(1 to "Amit",
2 to "Anand",
3 to "Messi")Java
// Java 7 and belowfor (Carcar : cars) {
System.out.println(car.speed);
}
// Java 8+cars.forEach(car -> System.out.println(car.speed));
// Java 7 and belowfor (Carcar : cars) {
if (car.speed > 100) {
System.out.println(car.speed);
}
}
// Java 8+cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));
cars.parallelStream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));Kotlin
cars.forEach {
println(it.speed)
}
cars.filter { it.speed >100 }
.forEach { println(it.speed)}
// kotlin 1.1+
cars.stream().filter { it.speed >100 }.forEach { println(it.speed)}
cars.parallelStream().filter { it.speed >100 }.forEach { println(it.speed)}java
String[] splits = "param=car".split("=");
Stringparam = splits[0];
Stringvalue = splits[1];kotlin
val (param, value) ="param=car".split("=")Java
voiddoSomething() {
// logic here
}Kotlin
fundoSomething() {
// logic here
}Java
doublecalculateCost(intquantity, doublepricePerItem) {
returnpricePerItem * quantity;
}
doublecalculateCost(intquantity) {
// default price is 20.5return20.5 * quantity;
}Kotlin
funcalculateCost(quantity:Int, pricePerItem:Double = 20.5) = quantity * pricePerItem
calculateCost(10, 25.0) // 250
calculateCost(10) // 205Java
voiddoSomething(int... numbers) {
// logic here
}Kotlin
fundoSomething(varargnumbers:Int) {
// logic here
}Java
intgetScore() {
// logic herereturnscore;
}Kotlin
fungetScore(): Int {
// logic herereturn score
}
// as a single-expression functionfungetScore(): Int= score
// even simpler (type will be determined automatically)fungetScore() = score // return-type is IntJava
intgetScore(intvalue) {
// logic herereturn2 * value;
}Kotlin
fungetScore(value:Int): Int {
// logic herereturn2* value
}
// as a single-expression functionfungetScore(value:Int): Int=2* value
// even simpler (type will be determined automatically)fungetScore(value:Int) =2* value // return-type is intJava
publicclassUtils {
privateUtils() {
// This utility class is not publicly instantiable
}
publicstaticintgetScore(intvalue) {
return2 * value;
}
}Kotlin
classUtils private constructor() {
companionobject {
fungetScore(value:Int): Int {
return2* value
}
}
}
// another wayobject Utils {
fungetScore(value:Int): Int {
return2* value
}
}Java
publicclassDeveloper {
privateStringname;
privateintage;
publicDeveloper(Stringname, intage) {
this.name = name;
this.age = age;
}
publicStringgetName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name = name;
}
publicintgetAge() {
returnage;
}
publicvoidsetAge(intage) {
this.age = age;
}
@Overridepublicbooleanequals(Objecto) {
if (this == o) returntrue;
if (o == null || getClass() != o.getClass()) returnfalse;
Developerdeveloper = (Developer) o;
if (age != developer.age) returnfalse;
returnname != null ? name.equals(developer.name) : developer.name == null;
}
@OverridepublicinthashCode() {
intresult = name != null ? name.hashCode() : 0;
result = 31 * result + age;
returnresult;
}
@OverridepublicStringtoString() {
return"Developer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}Kotlin
data classDeveloper(varname:String, varage:Int)
Java
publicclassDeveloperimplementsCloneable {
privateStringname;
privateintage;
publicDeveloper(Stringname, intage) {
this.name = name;
this.age = age;
}
@OverrideprotectedObjectclone() throwsCloneNotSupportedException {
return (Developer)super.clone();
}
}
// cloning or copyingDeveloperdev = newDeveloper("Messi", 30);
try {
Developerdev2 = (Developer) dev.clone();
} catch (CloneNotSupportedExceptione) {
// handle exception
}Kotlin
data classDeveloper(varname:String, varage:Int)
// cloning or copyingval dev =Developer("Messi", 30)
val dev2 = dev.copy()
// in case you only want to copy selected propertiesval dev2 = dev.copy(age =25)
Java
// Example #1interfaceSomeInterface<T> {
voiddoSomething(Tdata);
}
classSomeClassimplementsSomeInterface<String> {
@OverridepublicvoiddoSomething(Stringdata) {
// some logic
}
}
// Example #2interfaceSomeInterface<TextendsCollection<?>> {
voiddoSomething(Tdata);
}
classSomeClassimplementsSomeInterface<List<String>> {
@OverridepublicvoiddoSomething(List<String> data) {
// some logic
}
}Kotlin
interfaceSomeInterface<T> {
fundoSomething(data:T)
}
classSomeClass: SomeInterface<String> {
overridefundoSomething(data:String) {
// some logic
}
}
interfaceSomeInterface<T:Collection<*>> {
fundoSomething(data:T)
}
classSomeClass: SomeInterface<List<String>> {
overridefundoSomething(data:List<String>) {
// some logic
}
}Java
publicclassUtils {
privateUtils() {
// This utility class is not publicly instantiable
}
publicstaticinttriple(intvalue) {
return3 * value;
}
}
intresult = Utils.triple(3);Kotlin
fun Int.triple(): Int {
returnthis*3
}
var result =3.triple()Java
Personperson;Kotlin
internallateinitvar person:PersonJava
publicenumDirection {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
intdirection;
Direction(intdirection) {
this.direction = direction;
}
publicintgetDirection() {
returndirection;
}
}Kotlin
enumclassDirection(valdirection:Int) {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
}Java
List<Profile> profiles = loadProfiles(context);
Collections.sort(profiles, newComparator<Profile>() {
@Overridepublicintcompare(Profileprofile1, Profileprofile2) {
if (profile1.getAge() > profile2.getAge()) return1;
if (profile1.getAge() < profile2.getAge()) return -1;
return0;
}
});Kotlin
val profile = loadProfiles(context)
profile.sortedWith(Comparator({ profile1, profile2 ->if (profile1.age > profile2.age) return@Comparator 1if (profile1.age < profile2.age) return@Comparator -1return@Comparator 0
}))Java
AsyncTask<Void, Void, Profile> task = newAsyncTask<Void, Void, Profile>() {
@OverrideprotectedProfiledoInBackground(Void... voids) {
// fetch profile from API or DBreturnnull;
}
@OverrideprotectedvoidonPreExecute() {
super.onPreExecute();
// do something
}
};Kotlin
val task =object:AsyncTask<Void, Void, Profile>() {
overridefundoInBackground(varargvoids:Void): Profile? {
// fetch profile from API or DBreturnnull
}
overridefunonPreExecute() {
super.onPreExecute()
// do something
}
}Java
publicclassUser {
{ //Initialization blockSystem.out.println("Init block");
}
}Kotlin
classUser {
init { // Initialization blockprintln("Init block")
}
}- Mastering Kotlin Coroutines - Mastering Kotlin Coroutines
- Dispatchers in Kotlin Coroutines - Dispatchers in Kotlin Coroutines
- coroutineScope vs supervisorScope - coroutineScope vs supervisorScope
- CoroutineContext in Kotlin - CoroutineContext in Kotlin
- What is Flow API in Kotlin? - What is Flow API in Kotlin?
- Long-running tasks in parallel with Kotlin Flow - Long-running tasks in parallel with Kotlin Flow
- Retry Operator in Kotlin Flow - Retry Operator in Kotlin Flow
- Callback to Coroutines in Kotlin - Callback to Coroutines in Kotlin
- Retrofit with Kotlin Flow - Retrofit with Kotlin Flow
- Room Database with Kotlin Flow - Room Database with Kotlin Flow
- Remove duplicates from an array - Remove duplicates from an array in Kotlin
- JvmStatic Annotation in Kotlin - JvmStatic Annotation in Kotlin
- JvmOverloads Annotation in Kotlin - JvmOverloads Annotation in Kotlin
- JvmField Annotation in Kotlin - JvmField Annotation in Kotlin
- inline function in Kotlin - inline function in Kotlin
- noinline in Kotlin - noinline in Kotlin
- crossinline in Kotlin - crossinline in Kotlin
- lateinit vs lazy in Kotlin - lateinit vs lazy in Kotlin
- init block in Kotlin - init block in Kotlin
- Retrofit with Kotlin Coroutines - Retrofit with Kotlin Coroutines
- Advantage of using const in Kotlin - Advantage of using const in Kotlin
- AssociateBy - List to Map in Kotlin - Kotlin Collection Functions - associateBy that converts a list into a map
- partition - filtering function in Kotlin - partition - filtering function in Kotlin
- Infix notation in Kotlin - Infix notation in Kotlin
- Open keyword in Kotlin - Open keyword in Kotlin
- Companion object in Kotlin - Companion object in Kotlin
- Extension function in Kotlin - Extension function in Kotlin
- data class in Kotlin - data class in Kotlin
- How does the Kotlin Multiplatform work? - How does the Kotlin Multiplatform work?
Join Outcome School and get high paying tech job: Outcome School
- Support by clicking the ⭐ button on the upper right of this page. ✌️
Copyright (C) 2024 Amit Shekhar
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Just make a pull request. You are in!
