Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Khi làm việc với đối tượng Stream trong Java, đôi khi chúng ta sẽ có những đối tượng Stream của những đối tượng List, Set hay là Array. Ví dụ như:
List<String> students1 = new ArrayList<>(); students1.add("Khanh"); List<String> students2 = new ArrayList<>(); students2.add("Thanh"); students2.add("Dung"); List<List<String>> students = Arrays.asList(students1, students2); Stream<List<String>> stream = students.stream();
Ở đây, chúng ta có đối tượng List chứa những đối tượng List của những đối tượng String và khi convert đối tượng này qua đối tượng Stream, chúng ta có đối tượng Stream chứa đối tượng List của những đối tượng String.
Khi đó, nếu chúng ta cần thao tác trên đối tượng Stream này ví dụ như filter chẳng hạn thì chúng ta không thể làm được. Ví dụ như:
Xem thêm nhiều việc làm Java hấp dẫn trên TopDev
Để giải quyết vấn đề này, chúng ta có thể sử dụng phương thức flatMap() trong đối tượng Stream trước khi chúng ta cần thao tác điều gì đó trên đối tượng Stream. Sử dụng phương thức flatMap() chúng ta có thể chuyển đổi đối tượng Stream của những đối tượng List, Set or Array thành đối tượng Stream của những đối tượng đơn giản hơn.
Ví dụ như:
List<String> students1 = new ArrayList<>(); students1.add("Khanh"); List<String> students2 = new ArrayList<>(); students2.add("Thanh"); students2.add("Dung"); List<List<String>> students = Arrays.asList(students1, students2); Stream<List<String>> stream = students.stream(); Stream<String> flatMap = stream.flatMap(l -> l.stream());
Bây giờ, chúng ta có thể sử dụng phương thức flapMap() để giải quyết vấn đề trên: