You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Java对象列表的日期条件数据查询实现

控制器类
public Object getDashboardUser(@RequestParam("state") String state, @RequestParam("startDate") String startDate,
                               @RequestHeader(GradebookConstants.AUTHORIZATION) String token) {
    try {
        var query = new FindDashboardUser();
        query.setState(state);
        query.setStartDate(startDate);
        var response = queryGateway.query(query, ResponseTypes.instanceOf(Object.class)).join();

        if (response == null) {
            return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);
        }
        return response;
    } catch (Exception ex) {
        logger.info(ex.getMessage());
        var safeErrorMessage = GradebookConstants.FAILED_TO_GET_BY_ID;
        return new ResponseEntity<>(safeErrorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
查询实现类(需求:按日期筛选数据)

需求说明:需根据传入的startDate参数进行数据筛选,若startDate与WidgetData的createdDate匹配,则仅返回该记录;若不匹配,则返回全部用户数据。

原代码

@QueryHandler
@Override
public Object getDashboardUser(FindDashboardUser query) {

    List<WidgetData> widget = new ArrayList<WidgetData>();
    widget.add(new WidgetData("1", "Needs Grading User", 1, "0988-884884-144a","10-18-2022"));
    widget.add(new WidgetData("4", "Needs Grading User", 3, "0988-884884-244b","10-17-2022"));
    widget.add(new WidgetData("3", "Needs Grading User", 5, "0988-884884-344c","10-19-2022"));
    widget.add(new WidgetData("5", "Needs Grading User", 4, "0988-884884-444d","10-20-2022"));
    widget.add(new WidgetData("2", "Needs Grading User", 2, "0988-884884-544e","10-21-2022"));

    List<DashboardUserResponseDto> user = new ArrayList<DashboardUserResponseDto>();
    user.add(new DashboardUserResponseDto("0988-884884-344", "User Dashboard Widget", "Custom Widget", widget));

    Collections.sort(widget, (id1, id2) -> (id2.getWidgetId().compareTo(id1.getWidgetId())));


     Map<String, String> map = new HashMap<>();
     for (WidgetData widgetData : widget.toArray(new WidgetData[0]));

    return user;
}

实现需求后的代码

@QueryHandler
@Override
public Object getDashboardUser(FindDashboardUser query) {
    // 初始化模拟数据
    List<WidgetData> widgetList = new ArrayList<>();
    widgetList.add(new WidgetData("1", "Needs Grading User", 1, "0988-884884-144a", "10-18-2022"));
    widgetList.add(new WidgetData("4", "Needs Grading User", 3, "0988-884884-244b", "10-17-2022"));
    widgetList.add(new WidgetData("3", "Needs Grading User", 5, "0988-884884-344c", "10-19-2022"));
    widgetList.add(new WidgetData("5", "Needs Grading User", 4, "0988-884884-444d", "10-20-2022"));
    widgetList.add(new WidgetData("2", "Needs Grading User", 2, "0988-884884-544e", "10-21-2022"));

    // 获取传入的筛选日期
    String startDate = query.getStartDate();
    List<WidgetData> filteredWidgets = new ArrayList<>();

    // 执行筛选逻辑
    if (startDate != null && !startDate.isEmpty()) {
        // 匹配createdDate的记录
        for (WidgetData widget : widgetList) {
            if (startDate.equals(widget.getCreatedDate())) {
                filteredWidgets.add(widget);
            }
        }
        // 无匹配结果时返回全部数据
        if (filteredWidgets.isEmpty()) {
            filteredWidgets = widgetList;
        }
    } else {
        // 无筛选条件时返回全部数据
        filteredWidgets = widgetList;
    }

    // 按widgetId降序排序
    Collections.sort(filteredWidgets, (id1, id2) -> id2.getWidgetId().compareTo(id1.getWidgetId()));

    // 构造响应DTO
    List<DashboardUserResponseDto> userResponse = new ArrayList<>();
    userResponse.add(new DashboardUserResponseDto(
            "0988-884884-344",
            "User Dashboard Widget",
            "Custom Widget",
            filteredWidgets
    ));

    return userResponse;
}

关键修改说明

  • 从query中获取传入的startDate参数作为筛选依据
  • 新增筛选逻辑:startDate非空时筛选匹配记录,无匹配或参数为空则返回全部数据
  • 移除原代码中无意义的Map定义和空循环,优化代码结构
WidgetData类
public class WidgetData {
    private String widgetId;
    private String widgetName;
    private Integer sequence;
    private String userId;
    private String createdDate;

    // 补充构造方法,用于初始化对象
    public WidgetData(String widgetId, String widgetName, Integer sequence, String userId, String createdDate) {
        this.widgetId = widgetId;
        this.widgetName = widgetName;
        this.sequence = sequence;
        this.userId = userId;
        this.createdDate = createdDate;
    }

    // 补充必要的getter方法,用于属性访问
    public String getCreatedDate() {
        return createdDate;
    }

    public String getWidgetId() {
        return widgetId;
    }

    // 其他getter/setter可按需补充
}
DashboardUserResponseDto类
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DashboardUserResponseDto {
    private String userId;
    private String name;
    private String type;
    private List<WidgetData> widgetDetails;
}

内容的提问来源于stack exchange,提问作者Mahrukh Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:20:28