Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง takeWhile() และ dropWhile() ใน Java 9

Stream API: takeWhile vs dropWhile

Java 9 เพิ่ม takeWhile() และ dropWhile() ให้ Stream interface ทำงานกับ Predicate

takeWhile()

พฤติกรรม: รับ elements ตั้งแต่ต้นจนกว่า predicate จะเป็น false

Syntax

default Stream<T> takeWhile(Predicate<? super T> predicate)

ตัวอย่าง

Stream.of("India", "Australia", "Newzealand", "", "South Africa", "England")
    .takeWhile(o -> !o.isEmpty())
    .forEach(System.out::print);
// Output: IndiaAustraliaNewzealand

dropWhile()

พฤติกรรม: ข้าม elements ตั้งแต่ต้นจนกว่า predicate จะเป็น false แล้วคืนส่วนที่เหลือ

Syntax

default Stream<T> dropWhile(Predicate<? super T> predicate)

ตัวอย่าง

Stream.of("India", "Australia", "Newzealand", "", "England", "Srilanka")
    .dropWhile(o -> !o.isEmpty())
    .forEach(System.out::print);
// Output: EnglandSrilanka

Stream.of("India", "", "Australia", "", "England", "Srilanka")
    .dropWhile(o -> !o.isEmpty())
    .forEach(System.out::print);
// Output: AustraliaEnglandSrilanka

ตารางเปรียบเทียบ

คุณสมบัติtakeWhile()dropWhile()
Stream ที่มีลำดับ (ordered)Longest prefix matching predicateRemaining after prefix
Stream ไม่มีลำดับ (unordered)Subset matching predicateRemaining after dropping subset
ใช้เมื่อต้องการ prefix ที่ตรงเงื่อนไขต้องการข้อมูลหลังจากเงื่อนไขหยุด

สรุป

  • takeWhile = "เอาไปจนกว่า..." (prefix)
  • dropWhile = "ทิ้งไปจนกว่า... แล้วเอาต่อ" (suffix after condition fails)