Để filter một Map sử dụng Stream và Lambda Expression trong Java, chúng ta cũng sẽ sử dụng phương thức filter() của đối tượng Stream được lấy từ đối tượng Entry của đối tượng Map như filter một List. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này, các bạn nhé!
Ví dụ, mình có một đối tượng Map như sau:
1 2 3 4 |
Map<String, Integer> studentMap = new HashMap<>(); studentMap.put("Khanh", 31); studentMap.put("Thanh", 25); studentMap.put("Dung", 35); |
Trước Java 8, để filter đối tượng Map này và lấy tuổi của sinh viên Khanh, chúng ta có thể viết code như sau:
1 2 3 4 5 6 |
int age = 0; for (Map.Entry<String, Integer> entry : studentMap.entrySet()) { if ("Khanh".equals(entry.getKey())) { age = entry.getValue(); } } |
Kết quả:
Từ Java 8, chúng ta có thể viết lại đoạn code trên như sau sử dụng Stream và Lambda Expression:
1 2 3 4 5 |
Integer age = studentMap.entrySet().stream() .filter(map -> "Khanh".equals(map.getKey())) .map(map -> map.getValue()) .findFirst() .get(); |
Kết quả:
Chúng ta cũng có thể filter một Map và trả về một Map như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.huongdanjava.javaexample; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class Example { public static void main(String[] args) { Map<String, Integer> studentMap = new HashMap<>(); studentMap.put("Khanh", 31); studentMap.put("Thanh", 25); studentMap.put("Dung", 35); Map<String, Integer> age = studentMap.entrySet().stream() .filter(map -> "Khanh".equals(map.getKey())) .collect(Collectors.toMap(m -> m.getKey(), m -> m.getValue())); System.out.println(age); } } |
Kết quả: