Java 8 Stream Debugging with Intellij

Chiwa Kantawong (Pea)
3 min readAug 23, 2021

บางครั้งเราใช้ Stream API ซึ่งมีใน Java8 เป็นต้นมา เพื่อทดแทน Traditional loop ที่เราเคยทำๆ กันมาเพื่อประสิทธิภาพ ที่ดีขึ้น อ่านง่ายขึ้น แต่ว่าการใช้ Debugger ปกติที่มีอยู่ใน Intellij ไม่สามารถทำได้ มีน้องๆ เพื่อนๆ หลายคนถามว่าพี่พี debug ยังไง มันทำได้ไหม วันนี้จะมาเฉลยกันครับ

เปิด IntelliJ ขึ้นมา ไป install plugin ตัวนี้เลยครับ

ต่อไปมาดูตัวอย่างการ debugging กันเลยนะครับ

สร้าง Class Customer ขึ้นมาครับ

package com.zengcode.debugging;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Customer {

private int id;
private String name;
private int age;

}

สร้าง CustomerRepository เพื่อ Mock data ขึ้นมาใช้งานกันครับ

package com.zengcode.debugging;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CustomerRepository {

public static List<Customer> getCustomers() {
return Stream.of(new Customer(1, "Chiwa", 31),
new Customer(2, "Chiwa", 33),
new Customer(2, "Zabra", 31),
new Customer(2, "Maree", 25),
new Customer(2, "Aree", 36),
new Customer(2, "Mana", 31),
new Customer(2, "Jamrong", 29)
)
.collect(Collectors.toList());

}
}

สร้าง StreamApiDebuggingExample

package com.zengcode.debugging;

import java.util.List;
import java.util.stream.Collectors;

public class StreamApiDebuggingExample {

public static void main(String[] args) {
List<String> nameList = CustomerRepository.getCustomers()
.stream()
.filter(customer -> customer.getAge() > 30)
.map(Customer::getName)
.distinct()
.sorted()
.collect(Collectors.toList());

System.out.println(nameList);
}
}

ลองรันดูก็จะได้

ต่อไปเรามา debuging กันครับ

จะเห็นปุ่มนี้นะครับ Trace Current Steam Chain

กดเลยครับ

ดูชัดๆ Chain ที่เราสร้าง

ต่อไปดูที่เรา filter

ดู map กัน

ต่อไปก็ ดู distinct

ต่อไป sorted

ต่อไป collect

เป็นไง เท่ห์ป่ะ debug กันได้ง่ายๆ แหระเนอะ

เอาไปลองเล่นกันนะครับ

--

--