参考代码实现如下(还需优化):
```java public class SortUtils { // 当前数据节点 private BusinessSystemFunctionData current; // 兄弟节点数据 private List<BusinessSystemFunctionData> brother; //以当前节点分割,当前之前的数据 private List<BusinessSystemFunctionData> beforeList; //以当前节点分割,当前之后的数据 private List<BusinessSystemFunctionData> afterList; // 当前节点的下标 private int currintIndex; // 兄弟节点是否包含当前节点 private boolean constan; public SortUtils(BusinessSystemFunctionData businessSystemFunctionData, List<BusinessSystemFunctionData> list) { this.current = businessSystemFunctionData; this.brother = list; check(); } /** * 以当前节点,把兄弟数据分为两部分,分为前后,方便置顶和置顶操作 */ public void split() { this.beforeList = this.brother.subList(0, currintIndex); this.afterList = this.brother.subList(currintIndex + 1, this.brother.size()); } /** * 校验数据的合法性 */ private void check() { if (null == this.current || null == this.brother) { throw new IllegalArgumentException("非法参数,请初始化参数"); } for (int i = 0; i < brother.size(); i++) { if (this.current.getId().equals(brother.get(i).getId())) { currintIndex = i; constan = true; break; } } if (!constan || currintIndex >= this.brother.size()) { throw new IllegalArgumentException("非法参数,初始化参数,有误,兄弟节点不包含当前节点"); } } /** * 置顶 * * @return */ public List<BusinessSystemFunctionData> toTop() { List<BusinessSystemFunctionData> list = new ArrayList<>(brother.size()); list.add(this.current); list.addAll(beforeList); list.addAll(afterList); for (int i = 0; i < list.size(); i++) { list.get(i).setSort((i + 1)); } return list; } /** * 置底 * * @return */ public List<BusinessSystemFunctionData> toBottom() { List<BusinessSystemFunctionData> list = new ArrayList<>(brother.size()); list.addAll(beforeList); list.addAll(afterList); list.add(this.current); for (int i = 0; i < list.size(); i++) { list.get(i).setSort((i + 1)); } return list; } /** * 上移 * * @return */ public List<BusinessSystemFunctionData> toUp() { if (currintIndex > 0) { BusinessSystemFunctionData businessSystemFunctionData = this.brother.get(currintIndex - 1); this.brother.set(currintIndex - 1, current); this.brother.set(currintIndex, businessSystemFunctionData); } for (int i = 0; i < this.brother.size(); i++) { this.brother.get(i).setSort((i + 1)); } return this.brother; } /** * 下移动 * * @return */ public List<BusinessSystemFunctionData> toDown() { if (currintIndex < brother.size() - 1) { BusinessSystemFunctionData businessSystemFunctionData = this.brother.get(currintIndex + 1); this.brother.set(currintIndex + 1, current); this.brother.set(currintIndex, businessSystemFunctionData); } for (int i = 0; i < this.brother.size(); i++) { this.brother.get(i).setSort((i + 1)); } return this.brother; } }