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

ความสำคัญของเมธอด iterate() ของ Stream API ใน Java 9

การปรับปรุง iterate() ใน Java 9

Java 8: iterate(seed, unaryOperator) -> infinite stream ต้องใช้ limit/findFirst เพื่อหยุด

Java 9: เพิ่มพารามิเตอร์ Predicate (hasNext) เพื่อกำหนดเงื่อนไขหยุดโดยตรง

Syntax

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

ตัวอย่าง: Java 8 vs Java 9

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

public class StreamIterateMethodTest {
    public static void main(String args[]) {
        // Java 8 - ต้องใช้ limit
        List<Integer> numbers1 = Stream.iterate(1, i -> i+1)
            .limit(10)
            .collect(Collectors.toList());
        System.out.println("In Java 8:" + numbers1);

        // Java 9 - ใช้ predicate หยุดเอง
        List<Integer> numbers2 = Stream.iterate(1, i -> i <= 10, i -> i+1)
            .collect(Collectors.toList());
        System.out.println("In Java 9:" + numbers2);
    }
}

Output

In Java 8:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In Java 9:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ประโยชน์

  • เขียน stream ที่มีเงื่อนไขหยุดชัดเจน ไม่ต้อง limit
  • โค้ดอ่านง่าย ใกล้เคียง for-loop แบบเดิม
  • หลีกเลี่ยงการคำนวณเกินความจำเป็น

สรุป

iterate(seed, hasNext, next) ใน Java 9 ทำให้สร้าง finite stream จาก iteration ได้โดยตรงและเป็นธรรมชาติมากขึ้น