一个list中有100w条数据,id由1到1000000,如何筛选出250000<=id >= 1 的数据
时间: 2025-04-03 15:14:25 浏览: 27
当需要在一个包含 100W 数据的列表中筛选出满足条件的数据(比如 `250000 <= id` 并且 `id >= 1`),我们可以使用 Java 的流式操作(Stream API)、循环遍历或其他高效的集合工具库完成这一任务。
以下是几种常见的解决方案:
---
### 方案一:基于 Stream API 筛选
利用 Java 8 引入的 Stream 流式操作,可以快速对集合元素进行过滤、排序等操作。示例如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 假设 list 已经初始化好,其中每个 Map<String, Object> 包含了 id 字段
List<Map<String, Object>> dataList = new ArrayList<>();
for(int i=1;i<=1000000;i++) {
Map<String, Object> map = new HashMap<>();
map.put("id",i);
dataList.add(map);
}
long startTime = System.currentTimeMillis();
// 使用 Stream 过滤掉不符合条件的数据
List<Map<String, Object>> filteredData = dataList.stream()
.filter(item -> {
Integer id = (Integer)item.get("id");
return id != null && id >= 1 && id <= 250000;
})
.collect(Collectors.toList());
long endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime) + " ms");
// 输出结果大小
System.out.println("过滤后的数据量:" + filteredData.size());
}
}
```
**优点**:
- 代码简洁清晰。
- 利用了 Lambda 表达式的特性提升效率。
**注意**:
对于大数据量的操作,内存占用可能会比较高,因此需要合理管理资源或分批处理。
---
### 方案二:传统 for 循环迭代
如果不考虑使用最新的 Stream 功能,则可以选择传统的 for 循环手动添加符合条件的数据至新集合中。
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
// 初始化原始数据...
List<Map<String, Object>> dataList = new ArrayList<>();
for(int i=1;i<=1000000;i++) {
Map<String, Object> map = new HashMap<>();
map.put("id",i);
dataList.add(map);
}
long startTime = System.currentTimeMillis();
// 新建一个存储满足条件的对象容器
List<Map<String, Object>> resultList = new ArrayList<>(dataList.size());
for(Map<String,Object> item : dataList){
Integer id = (Integer)item.get("id");
if(id !=null && id>=1 && id<=250000 ){
resultList.add(item);
}
}
long endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime)+ "ms" );
// 打印剩余的数量验证是否正确选出对应区间内的所有记录数目
System.out.println(resultList.size() == 250000 ? "成功匹配预期条目":"失败!");
}
}
```
**优点**:
- 性能稳定,在某些低版本 JDK 下可能是唯一选择。
- 对于小型项目来说足够简单明了。
**缺点**:
相较于方案一会显得冗长一些。
---
### 方案三:采用数据库查询优化性能
如果实际业务场景允许将这百万级的数据存放到数据库里的话,那么可以直接编写 SQL 查询语句来代替程序内部运算过程,从而提高整个系统的运行速度及稳定性。
例如 MySQL 中执行类似这样的命令即可得到想要的结果集:
```sql
SELECT * FROM table_name WHERE id BETWEEN 1 AND 250000 ;
```
这种方式不仅可以减少应用程序的压力而且还能充分利用现有成熟的关系型数据库引擎的优势。
---
阅读全文