Java到Kotlin的一些變化-基礎(chǔ)版本(適合有Java基礎(chǔ)的查看)

一些不一樣的規(guī)范

  1. Kotlin不需要在語(yǔ)句末尾加;分號(hào)
  2. Kotlin的變量都是要初始化的托猩,而Java則不需要
  3. Kotlin變量可以自動(dòng)識(shí)別變量類型姓蜂,類似于Python

1.Print打印方式

  • Java
System.out.print("Hello, World!");
System.out.println("Hello, World!");
  • Kotlin
print("Hello, World!")
println("Hello, World!")

2.Variables變量

  • Java
不可變變量
final int x;
final int y = 1;
可變變量
int x;
int y = 2;
x = 3;
y = 1;
  • Kotlin
不可變變量
val x: Int
val y = 1
可變變量
var x: Int
var y = 2
x = 3
y = 1 

3.關(guān)于空值NULL

  • Java
final String name = null;

String lastName;
lastName = null

if(text != null){
  int length = text.length();
}
  • Kotlin
val name: String? = null

var lastName: String?
lastName = null

var firstName: String
firstName = null // 編譯錯(cuò)誤

val length = text?.length

val length = text!!.length // NullPointerException if text == null

4.String字符串

  • Java
String name = "John";
String lastName = "Smith";
String text = "My name is: " + name + " " + lastName;
String otherText = "My name is: " + name.substring(2);

String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";
  • Kotlin
val name = "John"
val lastName = "Smith"
val text = "My name is: $name $lastName"
val otherText = "My name is: ${name.substring(2)}"

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

5.三元運(yùn)算符

  • Java
String text = x > 5 ? "x > 5" : "x <= 5";
  • Kotlin
val text = if (x > 5)  "x > 5"  else "x <= 5"

6.位操作

  • Java
final int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;
  • Kotlin
val andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2

7.Is As In

  • Java
if(x instanceof Integer){ }

final String text = (String) other;

if(x >= 0 && x <= 10 ){}
  • Kotlin
這里的is指代判斷
if (x is Int) { }

這里的as是類型轉(zhuǎn)換
val text = other as String

if (x in 0..10) { }

8.智能轉(zhuǎn)換

  • Java
if(a instanceof String){
  final String result = ((String) a).substring(1);
}
  • Kotlin
if (a is String) {
  val result = a.substring(1)
}

9.Switch / When

  • Java
final int x = // value;
final String xResult;

switch (x){
  case 0:
  case 11:
    xResult = "0 or 11";
    break;
  case 1:
  case 2:
    //...
  case 10:
    xResult = "from 1 to 10";
    break;
  default:
    if(x < 12 && x > 14) {
      xResult = "not from 12 to 14";
      break;
    }

    if(isOdd(x)) {
      xResult = "is odd";
      break;
    }

    xResult = "otherwise";
}



final int y = // value;
final String yResult;

if(isNegative(y)){
  yResult = "is Negative";
} else if(isZero(y)){
  yResult = "is Zero";
}else if(isOdd(y)){
  yResult = "is Odd";
}else {
  yResult = "otherwise";
}
  • Kotlin
val x = // value
val xResult = when (x) {
  0, 11 -> "0 or 11"
  in 1..10 -> "from 1 to 10"
  !in 12..14 -> "not from 12 to 14"
  else -> if (isOdd(x)) { "is odd" } else { "otherwise" }
}

val y = // value
val yResult = when {
  isNegative(y) -> "is Negative"
  isZero(y) -> "is Zero"
  isOdd(y) -> "is odd"
  else -> "otherwise"
}

10.For

  • Java
for (int i = 1; i < 11 ; i++) { }

for (int i = 1; i < 11 ; i+=2) { }

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }
  • Kotlin
for (i in 1 until 11) { }

for (i in 1..10 step 2) {}

for (item in collection) {}
for ((index, item) in collection.withIndex()) {}

for ((key, value) in map) {}

11.集合(List胖喳,Map)

  • Java
final List<Integer> numbers = Arrays.asList(1, 2, 3);

final Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");


// Java 9
final List<Integer> numbers = List.of(1, 2, 3);

final Map<Integer, String> map = Map.of(1, "One",
                                        2, "Two",
                                        3, "Three");


for (int number : numbers) {
  System.out.println(number);
}

for (int number : numbers) {
  if(number > 5) {
    System.out.println(number);
  }
}



final Map<String, List<Integer>> groups = new HashMap<>();
for (int number : numbers) {
  if((number & 1) == 0){
    if(!groups.containsKey("even")){
      groups.put("even", new ArrayList<>());
    }

    groups.get("even").add(number);
    continue;
  }

  if(!groups.containsKey("odd")){
    groups.put("odd", new ArrayList<>());
  }

  groups.get("odd").add(number);
}

// or

Map<String, List<Integer>> groups = items.stream().collect(
  Collectors.groupingBy(item -> (item & 1) == 0 ? "even" : "odd")
);


final List<Integer> evens = new ArrayList<>();
final List<Integer> odds = new ArrayList<>();
for (int number : numbers){
  if ((number & 1) == 0) {
    evens.add(number);
  }else {
    odds.add(number);
  }
}


final List<User> users = getUsers();

Collections.sort(users, new Comparator<User>(){
  public int compare(User user, User otherUser){
    return user.lastname.compareTo(otherUser.lastname);
  }
});

// or

users.sort(Comparator.comparing(user -> user.lastname));
  • Kotlin
val numbers = listOf(1, 2, 3)

val map = mapOf(1 to "One",
                2 to "Two",
                3 to "Three")



numbers.forEach {
    println(it)
}

numbers.filter  { it > 5 }
       .forEach { println(it) }


val groups = numbers.groupBy {
                if (it and 1 == 0) "even" else "odd"
             }


val (evens, odds) = numbers.partition { it and 1 == 0 }


val users = getUsers()
users.sortedBy { it.lastname }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孵延,一起剝皮案震驚了整個(gè)濱河市侵俗,隨后出現(xiàn)的幾起案子痛倚,更是在濱河造成了極大的恐慌,老刑警劉巖耸峭,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桩蓉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劳闹,警方通過(guò)查閱死者的電腦和手機(jī)院究,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)本涕,“玉大人业汰,你說(shuō)我怎么就攤上這事∑杏保” “怎么了样漆?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晦闰。 經(jīng)常有香客問(wèn)我氛濒,道長(zhǎng),這世上最難降的妖魔是什么鹅髓? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任舞竿,我火速辦了婚禮,結(jié)果婚禮上窿冯,老公的妹妹穿的比我還像新娘骗奖。我一直安慰自己,他們只是感情好醒串,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布执桌。 她就那樣靜靜地躺著,像睡著了一般芜赌。 火紅的嫁衣襯著肌膚如雪仰挣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天缠沈,我揣著相機(jī)與錄音膘壶,去河邊找鬼。 笑死洲愤,一個(gè)胖子當(dāng)著我的面吹牛颓芭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柬赐,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼亡问,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肛宋?” 一聲冷哼從身側(cè)響起州藕,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤束世,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后床玻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毁涉,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年笨枯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薪丁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遇西。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馅精,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粱檀,到底是詐尸還是另有隱情洲敢,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布茄蚯,位于F島的核電站压彭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渗常。R本人自食惡果不足惜壮不,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望皱碘。 院中可真熱鬧询一,春花似錦、人聲如沸癌椿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)踢俄。三九已至缩功,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間都办,已是汗流浹背嫡锌。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琳钉,地道東北人世舰。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像槽卫,于是被迫代替她去往敵國(guó)和親跟压。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354