定义一个方法,使用Predicate断言型接口,作为方法形参,筛选数据。{"迪丽热巴,33,女", "杨幂,38,女", "宋雨琦,25,女", "邓超,45,男", "易烊千玺,24,男", "刘亦菲,37,女"} 场景1:年龄大于30,姓名4个字。场景2:性别为女,姓名3个字
时间: 2024-11-04 07:13:59 浏览: 5
C#把数组中的某个元素取出来放到第一个位置的实现方法
5星 · 资源好评率100%
在Java中,你可以定义一个接受`Predicate<T>`类型的静态方法,`T`通常是你正在处理的对象类型。这里假设我们的数据是一个字符串列表,每个元素包含姓名、年龄和性别,我们可以创建一个`Person`类来表示这个结构。以下是如何实现这两个场景:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Person {
String name;
int age;
char gender;
// 构造函数和 getters-setters...
}
public class Main {
public static <T> List<T> filterByCondition(List<Person> data, Predicate<Person> condition) {
return data.stream()
.filter(condition)
.collect(Collectors.toList());
}
public static void main(String[] args) {
List<String[]> people = Arrays.asList(
{"迪丽热巴", "33", '女'},
{"杨幂", "38", '女'},
{"宋雨琦", "25", '女'},
{"邓超", "45", '男'},
{"易烊千玺", "24", '男'},
{"刘亦菲", "37", '女'}
);
// 场景1:年龄大于30,姓名4个字
Predicate<Person> predicate1 = person -> Integer.parseInt(person.age) > 30 && person.name.length() == 4;
List<Person> filtered1 = filterByCondition(people.stream().map(Person::new).collect(Collectors.toList()), predicate1);
// 场景2:性别为女,姓名3个字
Predicate<Person> predicate2 = person -> person.gender == '女' && person.name.length() == 3;
List<Person> filtered2 = filterByCondition(people.stream().map(Person::new).collect(Collectors.toList()), predicate2);
System.out.println("Scenario 1:");
filtered1.forEach(System.out::println);
System.out.println("Scenario 2:");
filtered2.forEach(System.out::println);
}
}
```
在这个例子中,我们首先将字符串数组转换为`Person`对象列表,然后分别应用两个条件过滤器。最后,打印出符合条件的人。
阅读全文