定义一个方法,使用Predicate断言型接口,作为方法形参,筛选数据。{“迪丽热巴,33,女”, “杨幂,38,女”, “宋雨琦,25,女”, “邓超,45,男”, “易烊千玺,24,男”, “刘亦菲,37,女”} 场景1:年龄大于30,姓名4个字。场景2:性别为女,姓名3个字
时间: 2024-11-03 20:16:39 浏览: 18
可以创建两个方法,分别接受`Predicate<String[]>`类型的参数,用于筛选数据。这里我们先定义一个简单的`Person`类,然后实现这两个场景:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
class Person {
String name;
int age;
char gender;
// 构造函数、getter和setter省略
public static List<Person> parseData(String[] data) {
List<Person> list = new ArrayList<>();
for (String item : data) {
String[] parts = item.split(",");
list.add(new Person(parts[0], Integer.parseInt(parts[1]), parts[2].charAt(0)));
}
return list;
}
public static void filterByAge(List<Person> persons, Predicate<Integer> ageCondition) {
persons.stream()
.filter(ageCondition.test(Integer::parseInt))
.forEach(System.out::println);
}
public static void filterByNameLengthAndGender(List<Person> persons, Predicate<String> nameCondition) {
persons.stream()
.filter(person -> person.getName().length() == 3 && nameCondition.test(person.getName()))
.forEach(System.out::println);
}
private String getName() {
return this.name;
}
}
// 使用场景1:年龄大于30,姓名4个字
public static void main(String[] args) {
String[] data = {"迪丽热巴,33,女", "杨幂,38,女", "宋雨琦,25,女", "邓超,45,男", "易烊千玺,24,男", "刘亦菲,37,女"};
List<Person> people = Person.parseData(data);
Predicate<Integer> ageAboveThirty = age -> age > 30; // 年龄大于30的条件
filterByAge(people, ageAboveThirty);
// 场景2:性别为女,姓名3个字
Predicate<String> femaleWithThreeNameChars = name -> name.length() == 3 && Character.isLowerCase(name.charAt(0)); // 姓名为3个字符且首字母小写的条件
filterByNameLengthAndGender(people, femaleWithThreeNameChars);
}
阅读全文