Skip to content

Latest commit

History

166 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FromJavaToKotlin

From Java To Kotlin

From Java To Kotlin - Your Cheat Sheet For Java To Kotlin

About me

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.

Follow Amit Shekhar

Follow Outcome School

I teach at Outcome School

  • AI and Machine Learning
  • Android

Join Outcome School and get a high-paying tech job: Outcome School

Live session on "Android Developer Interview Preparation for Product-based Companies"

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

Print to Console

Java

System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");

Kotlin

print("Amit Shekhar")
println("Amit Shekhar")

Constants and Variables

Java

Stringname = "Amit Shekhar";
finalStringname = "Amit Shekhar";

Kotlin

var name ="Amit Shekhar"val name ="Amit Shekhar"

Assigning the null value

Java

StringotherName;
otherName = null;

Kotlin

var otherName :String?
otherName =null

Verify if value is null

Java

if (text != null) {
intlength = text.length();
}

Kotlin

text?.let {
val length = text.length
}
// or simplyval length = text?.length

Verify if value is NotNull OR NotEmpty

Java

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 }

Concatenation of strings

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"

New line in string

Java

Stringtext = "First Line\n" +
"Second Line\n" +
"Third Line";

Kotlin

val text =""" |First Line |Second Line |Third Line""".trimMargin()

Substring

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")

Ternary Operations

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 ?:"")

Bitwise Operators

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 2

Check the type and casting

Java

if (objectinstanceofCar) {
Carcar = (Car) object;
}

Kotlin

if (objectis Car) {
var car =objectas Car
}
// if object is nullvar car =objectas? Car // var car = objectas Car?

Check the type and casting (implicit)

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
}

Multiple conditions

Java

if (score >= 0 && score <= 300) { }

Kotlin

if (score in0..300) { }

Multiple Conditions (Switch case)

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"
}

For-loops

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) { }

Collections

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")

for each

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)}

Splitting arrays

java

String[] splits = "param=car".split("=");
Stringparam = splits[0];
Stringvalue = splits[1];

kotlin

val (param, value) ="param=car".split("=")

Defining methods

Java

voiddoSomething() {
// logic here
}

Kotlin

fundoSomething() {
// logic here
}

Default values for method parameters

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) // 205

Variable number of arguments

Java

voiddoSomething(int... numbers) {
// logic here
}

Kotlin

fundoSomething(varargnumbers:Int) {
// logic here
}

Defining methods with return

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 Int

Returning result of an operation

Java

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 int

Constructors

Java

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
}
}

Getters and Setters

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)

Cloning or copying

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)

Generics

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
}
}

Extension function

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()

Defining uninitialized objects

Java

Personperson;

Kotlin

internallateinitvar person:Person

enum

Java

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);
}

Sorting List

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
}))

Anonymous Class

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
}
}

Initialization block

Java

publicclassUser {
{ //Initialization blockSystem.out.println("Init block");
}
}

Kotlin

classUser {
init { // Initialization blockprintln("Init block")
}
}

Important things to know in Kotlin

Join Outcome School and get high paying tech job: Outcome School

Found this project useful ❤️

  • Support by clicking the ⭐ button on the upper right of this page. ✌️

License

 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.

Contributing to From Java To Kotlin

Just make a pull request. You are in!

About

From Java To Kotlin - Your Cheat Sheet For Java To Kotlin

Topics

Resources

Stars

6.3k stars

Watchers

184 watching

Forks

Releases

Packages

Used by

Contributors

Languages