Java 9 - การปรับปรุง Stream API

สตรีมถูกนำมาใช้ใน Java เพื่อช่วยให้นักพัฒนาสามารถดำเนินการรวมจากลำดับของอ็อบเจ็กต์ ด้วย Java 9 มีการเพิ่มวิธีการอีกสองสามวิธีเพื่อทำให้สตรีมดีขึ้น

takeWhile (อินเทอร์เฟซ Predicate)

ไวยากรณ์

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

เมธอด takeWhile รับค่าทั้งหมดจนกว่าเพรดิเคตจะคืนค่าเป็นเท็จ ส่งคืนในกรณีของสตรีมแบบเรียงลำดับสตรีมที่ประกอบด้วยคำนำหน้าที่ยาวที่สุดขององค์ประกอบที่นำมาจากสตรีมนี้ตรงกับเพรดิเคตที่กำหนด

ตัวอย่าง

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty())
         .forEach(System.out::print);		 
   } 
}

เอาต์พุต

takeWh ในขณะที่เมธอดรับค่า a, b และ c ทั้งหมดจากนั้นเมื่อสตริงว่างเปล่าก็จะหยุดดำเนินการ

abc

dropWhile (อินเทอร์เฟซ Predicate)

ไวยากรณ์

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

dropWhile เมธอดทิ้งค่าทั้งหมดที่จุดเริ่มต้นจนกว่าเพรดิเคตจะคืนค่าเป็นจริง จะส่งคืนในกรณีของสตรีมแบบเรียงลำดับสตรีมที่ประกอบด้วยองค์ประกอบที่เหลือของสตรีมนี้หลังจากทิ้งคำนำหน้าองค์ประกอบที่ยาวที่สุดที่ตรงกับเพรดิเคตที่กำหนด

ตัวอย่าง

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      Stream.of("a","b","c","","e","f").dropWhile(s-> !s.isEmpty())
         .forEach(System.out::print);
      
      System.out.println();
      Stream.of("a","b","c","","e","","f").dropWhile(s-> !s.isEmpty())
         .forEach(System.out::print);
   } 
}

เอาต์พุต

drop ในขณะที่วิธีการลดค่า a, b และ c จากนั้นเมื่อสตริงว่างเปล่าจะใช้ค่าทั้งหมด

ef
ef

ย้ำ

ไวยากรณ์

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

เมธอด iterate ตอนนี้มีเพรดิเคต hasNext เป็นพารามิเตอร์ที่หยุดลูปเมื่อมีเพรดิเคตถัดไปส่งคืนเท็จ

ตัวอย่าง

import java.util.stream.IntStream;

public class Tester {
   public static void main(String[] args) {
      IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println);
   } 
}

เอาต์พุต

3
6
9

ของ Nullable

ไวยากรณ์

static <T> Stream<T> ofNullable(T t)

มีการนำเมธอด ofNullable มาใช้เพื่อป้องกัน NullPointerExceptions และเพื่อหลีกเลี่ยงการตรวจสอบ null สำหรับสตรีม วิธีนี้จะส่งคืนสตรีมตามลำดับที่มีองค์ประกอบเดียวหากไม่ใช่ค่าว่างมิฉะนั้นจะส่งคืนสตรีมว่าง

ตัวอย่าง

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      long count = Stream.ofNullable(100).count();
      System.out.println(count);
  
      count = Stream.ofNullable(null).count();
      System.out.println(count);
   } 
}

เอาต์พุต

1
0