java实现多条件list查询 且包含时间区间
时间: 2023-08-12 12:04:33 浏览: 55
在 Java 中实现多条件 List 查询并包含时间区间,可以使用 Java 8 的 Stream API 和 Lambda 表达式,结合 Java 8 新增的 `LocalDateTime` 类型来完成。
假设我们有一个 Order 类,它包含 orderId、userId、amount、createTime 四个属性:
```java
public class Order {
private String orderId;
private String userId;
private BigDecimal amount;
private LocalDateTime createTime;
// constructor, getters and setters
}
```
现在我们有一个 List,它包含多个 Order 对象:
```java
List<Order> orderList = Arrays.asList(
new Order("1001", "user1", new BigDecimal("100"), LocalDateTime.of(2021, 8, 1, 10, 0)),
new Order("1002", "user2", new BigDecimal("200"), LocalDateTime.of(2021, 8, 2, 12, 0)),
new Order("1003", "user3", new BigDecimal("300"), LocalDateTime.of(2021, 8, 3, 14, 0)),
new Order("1004", "user4", new BigDecimal("400"), LocalDateTime.of(2021, 8, 4, 16, 0)),
new Order("1005", "user5", new BigDecimal("500"), LocalDateTime.of(2021, 8, 5, 18, 0))
);
```
现在我们需要查询出所有 userId 为 user1、金额大于 50、创建时间在 8 月 1 日 10 时到 8 月 2 日 12 时之间的 Order 对象。我们可以使用 Stream API 和 Lambda 表达式来实现:
```java
LocalDateTime startTime = LocalDateTime.of(2021, 8, 1, 10, 0);
LocalDateTime endTime = LocalDateTime.of(2021, 8, 2, 12, 0);
List<Order> result = orderList.stream()
.filter(o -> "user1".equals(o.getUserId()))
.filter(o -> o.getAmount().compareTo(new BigDecimal("50")) > 0)
.filter(o -> o.getCreateTime().isAfter(startTime) && o.getCreateTime().isBefore(endTime))
.collect(Collectors.toList());
```
在上面的代码中,我们首先定义了一个 startTime 和一个 endTime,分别表示查询的时间区间。然后使用 Stream API 和 Lambda 表达式来对 List 进行过滤,筛选出 userId 为 user1、金额大于 50、创建时间在指定时间区间内的 Order 对象。最后,使用 `collect(Collectors.toList())` 方法将筛选出来的 Order 对象转换成 List 并返回。
通过这种方式,我们可以轻松地实现多条件 List 查询并包含时间区间。