java筛选项目列表并找出同一个人在同一时间段内参与的不同项目的数据
时间: 2024-10-23 09:03:04 浏览: 19
Java高并发秒杀项目源码.zip
在Java中,为了筛选项目列表并找出同一个人在同一时间段内参与的不同项目,你可以遵循以下步骤:
1. **数据结构**:首先,你需要有一个包含项目信息的数据结构,比如`Project`类,它应该包含项目名称、开始日期和结束日期,以及负责人的姓名。
```java
class Project {
String projectName;
Date startDate;
Date endDate;
String responsiblePerson;
}
```
2. **数据存储**:假设你有一个`List<Project>`类型的集合来存储所有项目。
3. **分组和过滤**:使用`Stream API`或者传统的`Collections.groupingBy`函数,可以根据负责人和时间范围(例如,将所有属于同一时间段的项目归到一起)对项目进行分组。
```java
Map<String, List<Project>> projectsByPersonAndTime = projects.stream()
.collect(Collectors.groupingBy(
p -> Joiner.on(",").join(p.responsiblePerson, p.startDate, p.endDate),
Collectors.toList()));
```
4. **找出不同项目**:对于每个分组,遍历其子列表,取出`Set`或新的`List`来去除重复的项目,因为一个人在同一时间段只能参与一次项目。
```java
projectsByPersonAndTime.values().forEach(projectList -> projectList.removeIf(project -> !projectList.containsAll(projectList.subList(0, 1))));
```
5. **结果处理**:最后,你将得到一个映射,其中键是负责人及其时间段,值是他们参与的不同项目。
```java
for (Map.Entry<String, List<Project>> entry : projectsByPersonAndTime.entrySet()) {
System.out.println("责任人: " + entry.getKey());
for (Project project : entry.getValue()) {
System.out.println("- 项目: " + project.projectName);
}
// 输出相关问题
阅读全文