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