วันศุกร์ที่ 6 พฤษภาคม พ.ศ. 2559

Lambdas & Streams for Java EE 8



คุณลักษณะของ 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
top.sk Web Developer

I can design web applications by using Java Server Faces (JSF), Primefaces, EJB3, SQL, DB2 (IBM) and designing report (Word, Excel and PDF) by using XML Script and Crystal Clear Report for the organization that can be easily and no problem for used and they can use the Web to manage the customer's organization effectively. I want to learn a new culture, technology and colleagues involved in the IT profession.

ไม่มีความคิดเห็น :

แสดงความคิดเห็น