คุณลักษณะของ Lambda Expressions
-Lambda expression = anonymous function
-anonymous function จะคิดว่ามันเหมือน Method แต่ไม่เกี่ยวข้องกับ Class
-สามารถนำมาใช้ในทุกที่ที่คุณจะใช้ใน anonymous inner class คือ Single abstract method type
-Syntax จะอยู่ในรูปแบบ ([optional-parameters]) -> body
ตัวอย่าง Lambda
SomeList<Student> students = ... double highestScore = students.stream(). filter(Student s -> s.getGradYear() == 2011). map(Student s -> s.getScore()). max();
การอ้าง Method
ขั้นตอนที่ 1 เราเขียน Java 7 โดยปกติ
FileFilter x = new FileFilter() { public boolean accept(File f) { return f.canRead(); } };
ขั้นตอนที่ 2 เมื่อเราใช้ Lambda Expressions ใน Java 8 เราจะเหลือแค่นี้เอง...
FileFilter x = (File f) -> f.canRead(); FileFilter x = File::canRead;
การใช้ Stream Class : java.util.stream
Stream<T> คือ การลำดับขององค์ประกอบที่สนับสนุนการดำเนินงานต่อเนื่อง (sequential) และแบบขนาน (parallel) ประกอบด้วย
-Collection.stream()
-Collection.parallelStream()
Multiple operations available
-collect, filter, count, skip, limit, sorted
-map (and map to types เช่น mapToInt)
flatMap คือ การ maps แต่ละองค์ประกอบในการสตรีมกับหลาย ๆ องค์ประกอบ
ตัวอย่างเช่น flatMap(line -> Stream.of(line.split(REGEXP));
ตัวอย่างการใช้ Stream Class
List<String> names = Arrays.asList(“Bob”, “Alice”, “Charlie”); System.out.println(names.stream().filter(e -> e.getLength() > 4).findFirst().get());
Useful Stream Methods
-collect (terminal)
-filter (intermediate)
-count (terminal)
-skip, limit (intermediate)
-max (terminal)
-getAsInt (terminal)
ตัวอย่าง Utils ที่มีใช้ใน java.util.function Package
-Predicate<T>
ตรวจสอบว่ามีการป้อนข้อมูลจากประเภท T ตรงกับเกณฑ์ บางอย่าง
-Consumer<T>
ยอมรับการป้อนข้อมูลเดียว argumentof ประเภท T และ return no result
-Function<T, R>
ประยุกต์ฟังก์ชั่นการป้อนข้อมูลประเภท T โดยการสร้างผลมาจาก R
Iterable Interface
1 method : forEach()
wordList.forEach(s -> System.out.println(s)); wordList.forEach(System.out::println);
การสร้าง Files และ Lines of Text
-BufferedReader มีการ new method
Stream<String> lines()
Reference : เอกสาร Lambdas & Streams Laboratory โดย Stuart Marks, Simon Ritter, Angela Caicedo จาก Oracle Corp. ในงาน JavaOne
ไม่มีความคิดเห็น :
แสดงความคิดเห็น