Mở đầu
Hí anh em!
Lại là mình đây, dạo này hơi bận và lười nên cũng chưa viết phần 2 của bài Optional trong java!
Hôm nay Hà Nội lại mưa, nên mình sẽ tiếp tục phần 2 cũng là phần cuối về Optional nhe!
bắt đầu thoi!!!
Bắt đầu
VIII. Filter();
Ngay cái tên thì các bạn cũng biết nó làm gì rồi phải không?
ví dụ đơn giản về Filter()
@Test
public void checkFilter() {
Integer year = 2016;
Optional<Integer> yearOptional = Optional.of(year);
boolean is2016 = yearOptional.filter(y -> y == 2016).isPresent();
assertTrue(is2016);
boolean is2017 = yearOptional.filter(y -> y == 2017).isPresent();
assertFalse(is2017);
}
Rồi bây giờ bắt đầu áp dụng vào bài toán thực tế xem filter hoạt động ra sao nhé!
Mình có 1 đề bài là kiểm tra xem điểm toán có nằm trong khoảng điểm từ A -> B hay không? Nếu có thì trả ra true và false nếu ngược lại!
Oke bắt đầu với từng trường hợp nhé!
Tạo một đối tượng là Poin và thuộc tính là math
@Data
@AllArgsConstructor
public class Poin {
private Double math;
}
ở đây mình có dùng Lombook để tự động genarate contructor và setter,getter
Tiếp theo mình tạo một class cho chứa method checkMath. Giả sử mình muốn kiểm tra điểm toán có nằm tròn khoảng từ 5 -> 8 hay không?
Boolean check = false;
public Boolean checkMath(Poin poin){
if(poin != null && poin.getMath() != null
&& poin.getMath() > 5 && poin.getMath() < 8){
return check = true;
}
return check;
}
Oke giờ chúng ta test cái method này xem sao nhé!
@Test
public void testCheckMath() {
assertTrue(priceAvg(new Poin(7.1)));
}
Các bạn tự run và xem kết quả nhé!
Trên là cách check if bình thường mà chúng ta hay làm, vậy giờ hãy sử dụng Filter của Optional xem sao nhé!
public Boolean checkMath(Poin poin){
return Optional.ofNullable(poin)
.map(poin::getMath)
.filter(f -> f < 5)
.filter(f -> f > 8)
.isPresent();
}
rồi các bạn chạy lại hàm test bên trên để xme kết quả nhé!
IX.map();
Ở ví dụ trên chúng ta thấy có map(), vậy để xem map này để làm gì nhé!
@Test
public void optionWithMap() {
List<String> companyNames = Arrays.asList(
"paypal", "oracle", "", "microsoft", "", "apple");
Optional<List<String>> listOptional = Optional.of(companyNames);
int size = listOptional
.map(List::size)
.orElse(0);
assertEquals(6, size);
}
nhìn ví dụ trên thì điều cái chúng ta quan tâm nhất là dấu ” :: ” này đúng không, đơn giản là nó dùng để tham chiếu đến các method của chính nó -> nó ở đây là List
Hay kết hợp map() với Filter() để có được hiểu năng tốt nhất nhé!
Kết
Như vậy chúng ta đã đi qua nhưng method của Optional rồi. Hãy app dụng nó vào những bài toán hàng ngày nhé!
Hẹn gặp lại các bạn vào bài viết sau nhé. Thanks fo watch!
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chínhMở đầuBắt đầuVIII. Filter();IX.map();Kết1. Bảo vệ khỏi tấn công...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chínhMở đầuBắt đầuVIII. Filter();IX.map();Kết1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux như một firewall được phát hành miễn phí để tăng tính bảo mật...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chínhMở đầuBắt đầuVIII. Filter();IX.map();KếtV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi trang web sử dụng đường dẫn đầy đủ Xét đoạn code php sau:...
Directory traversal vulnerabilities (phần 3)
Nội dung chínhMở đầuBắt đầuVIII. Filter();IX.map();KếtV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi sử dụng các hàm đọc file và tin tưởng đầu vào người dùng...
Directory traversal vulnerabilities (phần 2)
Nội dung chínhMở đầuBắt đầuVIII. Filter();IX.map();KếtIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau, điểm xuất hiện các lỗ hổng Directory traversal cũng khác nhau. Lỗ hổng...