实施订单排序

时间:2019-06-13 08:03:23

标签: java

我想在拖动一个过滤器时对在Spring端点中分配给终端的过滤器列表进行排序,并且如果再次计算,则所有过滤器的顺序。我尝试过:

DTO:

public class FilterNewDTO {

    private Integer id;

    private Integer terminal_id;

    private Integer position;

    private Integer parent_id;
}

端点:

@PostMapping("filter/updated_position/{id}")
    public ResponseEntity<?> saveFilterPosition(@PathVariable Integer id, @RequestBody FilterNewDTO dto) {

        List<Filters> list = filterService.findFiltersByTerminalId(dto.getTerminal_id());

        for (int i=0; i<list.size(); i++) {
            Filters filter = list.get(i);

            int current_position = 0;
            current_position = filter.getPosition();

            filter.setPosition(current_position + 1);
            filter.update(risk_mapper.toFilter(dto));

            filterService.save(filter);
        }

        return ok().build();
}

但是您可以看到,我只是通过终端ID遍历了过滤器列表。如果将滤镜位置从3更改为5,会发生什么?我认为第1-3部分不应增加。您能给我一些实施方法的指导吗?

2 个答案:

答案 0 :(得分:2)

与其将过滤器视为单个过滤器,不如将它们视为一个整体。您将获得过滤器列表,然后将其重新排列在新列表中。您对订单感到满意,然后更新所有这些,而不是一一更新。您不必担心此操作的性能,因为休眠将设法区分已更改的过滤器和未更改的过滤器。

类似:

    List<Filter> originalList;
    List<Filter> newlyOrderedList;

//do your ordering here

filterRepository.saveAll(newlyOrderedList);

答案 1 :(得分:0)

假设您希望每个终端的过滤器的编号都从1 ... n开始,setPosition()部分应该是

filter.setPosition(i+1);