From dc4f78556e4025adfa534f43c1246bfd6f87d324 Mon Sep 17 00:00:00 2001 From: buuoltwo Date: Sun, 29 Dec 2024 15:35:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8C=BF=E5=90=8D=E5=86=85=E9=83=A8?= =?UTF-8?q?=E7=B1=BB,=E4=BD=BF=E7=94=A8=E8=87=AA=E5=B7=B1=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/hcsp/polymorphism/User.java | 44 ++++++++++++++++++- ...\345\220\246\346\210\220\347\253\213.java" | 5 +++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 "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" diff --git a/src/main/java/com/github/hcsp/polymorphism/User.java b/src/main/java/com/github/hcsp/polymorphism/User.java index 51c95dc..59d17d6 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,46 @@ public static List filterWangUsers(List users) { // 你可以发现,在上面三个函数中包含大量的重复代码。 // 请尝试通过Predicate接口将上述代码抽取成一个公用的过滤器函数 // 并简化上面三个函数 - public static List filter(List users, Predicate predicate) {} +// public static List filter(List users, Predicate predicate) {} + 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")); + + 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("王"); + } + }); + } } 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); +} From 984cfde103fc20ac75364dab7f9f03c8d6b26ff4 Mon Sep 17 00:00:00 2001 From: buuoltwo Date: Sun, 29 Dec 2024 16:42:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8C=BF=E5=90=8D=E5=86=85=E9=83=A8?= =?UTF-8?q?=E7=B1=BB,=E4=BD=BF=E7=94=A8JDK=E7=9A=84=E6=8E=A5=E5=8F=A3=20Pr?= =?UTF-8?q?edicate=20(=E5=88=A4=E5=AE=9A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/hcsp/polymorphism/User.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/hcsp/polymorphism/User.java b/src/main/java/com/github/hcsp/polymorphism/User.java index 59d17d6..0dd1031 100644 --- a/src/main/java/com/github/hcsp/polymorphism/User.java +++ b/src/main/java/com/github/hcsp/polymorphism/User.java @@ -60,7 +60,15 @@ 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) { @@ -80,7 +88,8 @@ public boolean isOk(User user) { 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(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 判断条件是否成立(){ @@ -101,5 +110,17 @@ 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("周") ; + } + }); } }