diff --git a/src/main/java/com/github/hcsp/polymorphism/User.java b/src/main/java/com/github/hcsp/polymorphism/User.java index 51c95dc..0dd1031 100644 --- a/src/main/java/com/github/hcsp/polymorphism/User.java +++ b/src/main/java/com/github/hcsp/polymorphism/User.java @@ -1,6 +1,7 @@ package com.github.hcsp.polymorphism; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.function.Predicate; @@ -59,5 +60,67 @@ public static List filterWangUsers(List users) { // 你可以发现,在上面三个函数中包含大量的重复代码。 // 请尝试通过Predicate接口将上述代码抽取成一个公用的过滤器函数 // 并简化上面三个函数 - public static List filter(List users, Predicate predicate) {} + public static List filter(List users, Predicate predicate) { + List result = new ArrayList<>(); + for (User user : users) { + if(predicate.test(user)) { + result.add(user); + } + } + return result; + } + public static List filter(List users, 判断条件是否成立 条件) { + List result = new ArrayList<>(); + for (User user : users) { + if(条件.isOk(user)) { + result.add(user); + } + } + return result; + } + static class isEven implements 判断条件是否成立 { + @Override + public boolean isOk(User user) { + return user.id % 2 == 0; + } + } + + public static void main(String[] args) { + List users = + Arrays.asList( + new User(1, "王"), new User(2, "张"), new User(3, "张"), new User(4, "d"), + new User(5, "郭"), new User(6, "周")); + + List result0 = filter(users,new isEven()); + List result1 = filter(users,new 判断条件是否成立(){ + @Override + public boolean isOk(User user) { + return user.id % 2 == 0; + } + }); + List result2 = filter(users,new 判断条件是否成立(){ + @Override + public boolean isOk(User user) { + return user.name.startsWith("张"); + } + }); + List result3 = filter(users,new 判断条件是否成立(){ + @Override + public boolean isOk(User user) { + return user.name.startsWith("王"); + } + }); + List result4 = filter(users, new Predicate() { + @Override + public boolean test(User user) { + return user.name.startsWith("郭"); + } + }); + List result5 = filter(users, new Predicate() { + @Override + public boolean test(User user) { + return user.name.startsWith("周") ; + } + }); + } } diff --git "a/src/main/java/com/github/hcsp/polymorphism/\345\210\244\346\226\255\346\235\241\344\273\266\346\230\257\345\220\246\346\210\220\347\253\213.java" "b/src/main/java/com/github/hcsp/polymorphism/\345\210\244\346\226\255\346\235\241\344\273\266\346\230\257\345\220\246\346\210\220\347\253\213.java" new file mode 100644 index 0000000..d6da30c --- /dev/null +++ "b/src/main/java/com/github/hcsp/polymorphism/\345\210\244\346\226\255\346\235\241\344\273\266\346\230\257\345\220\246\346\210\220\347\253\213.java" @@ -0,0 +1,5 @@ +package com.github.hcsp.polymorphism; + +public interface 判断条件是否成立 { + boolean isOk(User user); +}