代码有错误 public class ListDownTest { public static void main(String[] args) { // 1. 获取原有的分页对象列表 System.out.println("原始数组"); List<Dog> originalList = getList(); for (Dog dog : originalList) { System.out.println(dog.toString()); } // 2. 从列表中删除第25、26、27项,并记录它们的位置和值 List<Dog> removedItems = new ArrayList<>(); removedItems.add(originalList.remove(24)); // 第25项 removedItems.add(originalList.remove(24)); // 第26项 removedItems.add(originalList.remove(24)); // 第27项 System.out.println("删除后数组"); for (Dog dog : originalList) { System.out.println(dog.toString()); } // 3. 将剩余的项按照原有的分页规则进行分页 int pageSize = 10; // 每页显示10项 int totalItems = originalList.size(); int totalPages = (int) Math.ceil((double) totalItems / pageSize); List<List<Dog>> pageList = new ArrayList<>(); for (int i = 0; i < totalPages; i++) { int fromIndex = i * pageSize; int toIndex = Math.min(fromIndex + pageSize, totalItems); pageList.add(originalList.subList(fromIndex, toIndex)); } // 4. 将删除的项插入到第5页的最后一项之后 int insertIndex = 0; // 第5页的最后一项 List<Dog> fifthPage = pageList.get(4); for (Dog item : removedItems) { fifthPage.add(insertIndex++, item); } // 5. 返回新的分页对象列表 List<Dog> newPageList = new ArrayList<>(); for (List<Dog> page : pageList) { newPageList.addAll(page); } for (Dog dog : newPageList) { System.out.println(dog.toString()); } } public static List<Dog> getList() { List<Dog> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { list.add(new Dog("name" + i, i, 0)); } return list; } @Data @AllArgsConstructor @ToString static class Dog { private String name; private Integer num; private Integer isDown; } }
时间: 2024-03-16 13:46:31 浏览: 127
java调用PLSQL分页过程.doc
问题不是很明确,但我猜测你想知道这段代码的问题是什么。这段代码的问题在于删除第25、26、27项时的索引计算错误。代码中使用remove()方法删除元素后,原列表的大小会发生变化,这导致后续删除的索引位置也发生了变化。正确的做法是从后往前删除,避免索引位置的变化。修改方法如下:
```java
removedItems.add(originalList.remove(26)); // 第27项
removedItems.add(originalList.remove(25)); // 第26项
removedItems.add(originalList.remove(24)); // 第25项
```
另外,代码中的Dog类使用了Lombok注解,需要先安装Lombok插件才能编译通过。
阅读全文