diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
index 66550508b..d9689068e 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
@@ -770,4 +770,29 @@ public class ListUtil {
}
return resList;
}
+
+ /**
+ * 将元素移动到指定列表的新位置。
+ *
+ * - 如果元素不在列表中,则将其添加到新位置。
+ * - 如果元素已在列表中,则先移除它,然后再将其添加到新位置。
+ *
+ *
+ * @param list 原始列表,元素将在这个列表上进行操作。
+ * @param element 需要移动的元素。
+ * @param newPosition 元素的新位置,从0开始计数,位置计算是以移除元素后的列表位置计算的
+ * @param 列表和元素的通用类型。
+ * @return 更新后的列表。
+ * @since 5.8.29
+ */
+ public static List move(final List list, final T element, final int newPosition) {
+ Assert.notNull(list);
+ if (!list.contains(element)) {
+ list.add(newPosition, element);
+ } else {
+ list.remove(element);
+ list.add(newPosition, element);
+ }
+ return list;
+ }
}
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/collection/ListUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/collection/ListUtilTest.java
index 8c3e2c0de..015824a27 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/collection/ListUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/collection/ListUtilTest.java
@@ -25,23 +25,25 @@ import org.junit.jupiter.api.Test;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
public class ListUtilTest {
@Test
public void partitionTest() {
List> lists = ListUtil.partition(null, 3);
- Assertions.assertEquals(ListUtil.empty(), lists);
+ assertEquals(ListUtil.empty(), lists);
lists = ListUtil.partition(Arrays.asList(1, 2, 3, 4), 1);
- Assertions.assertEquals("[[1], [2], [3], [4]]", lists.toString());
+ assertEquals("[[1], [2], [3], [4]]", lists.toString());
lists = ListUtil.partition(Arrays.asList(1, 2, 3, 4), 2);
- Assertions.assertEquals("[[1, 2], [3, 4]]", lists.toString());
+ assertEquals("[[1, 2], [3, 4]]", lists.toString());
lists = ListUtil.partition(Arrays.asList(1, 2, 3, 4), 3);
- Assertions.assertEquals("[[1, 2, 3], [4]]", lists.toString());
+ assertEquals("[[1, 2, 3], [4]]", lists.toString());
lists = ListUtil.partition(Arrays.asList(1, 2, 3, 4), 4);
- Assertions.assertEquals("[[1, 2, 3, 4]]", lists.toString());
+ assertEquals("[[1, 2, 3, 4]]", lists.toString());
lists = ListUtil.partition(Arrays.asList(1, 2, 3, 4), 5);
- Assertions.assertEquals("[[1, 2, 3, 4]]", lists.toString());
+ assertEquals("[[1, 2, 3, 4]]", lists.toString());
}
@Test
@@ -63,7 +65,7 @@ public class ListUtilTest {
final List> ListSplitResult = ListUtil.partition(list, size);
stopWatch.stop();
- Assertions.assertEquals(CollSplitResult, ListSplitResult);
+ assertEquals(CollSplitResult, ListSplitResult);
Console.log(stopWatch.prettyPrint());
}
@@ -71,26 +73,26 @@ public class ListUtilTest {
@Test
public void splitAvgTest() {
List> lists = ListUtil.avgPartition(null, 3);
- Assertions.assertEquals(ListUtil.empty(), lists);
+ assertEquals(ListUtil.empty(), lists);
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3, 4), 1);
- Assertions.assertEquals("[[1, 2, 3, 4]]", lists.toString());
+ assertEquals("[[1, 2, 3, 4]]", lists.toString());
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3, 4), 2);
- Assertions.assertEquals("[[1, 2], [3, 4]]", lists.toString());
+ assertEquals("[[1, 2], [3, 4]]", lists.toString());
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3, 4), 3);
- Assertions.assertEquals("[[1, 2], [3], [4]]", lists.toString());
+ assertEquals("[[1, 2], [3], [4]]", lists.toString());
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3, 4), 4);
- Assertions.assertEquals("[[1], [2], [3], [4]]", lists.toString());
+ assertEquals("[[1], [2], [3], [4]]", lists.toString());
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3), 5);
- Assertions.assertEquals("[[1], [2], [3], [], []]", lists.toString());
+ assertEquals("[[1], [2], [3], [], []]", lists.toString());
lists = ListUtil.avgPartition(Arrays.asList(1, 2, 3), 2);
- Assertions.assertEquals("[[1, 2], [3]]", lists.toString());
+ assertEquals("[[1, 2], [3]]", lists.toString());
}
@Test
public void splitAvgNotZero() {
- Assertions.assertThrows(IllegalArgumentException.class, ()->{
+ Assertions.assertThrows(IllegalArgumentException.class, () -> {
// limit不能小于等于0
ListUtil.avgPartition(Arrays.asList(1, 2, 3, 4), 0);
});
@@ -100,9 +102,9 @@ public class ListUtilTest {
public void editTest() {
final List a = ListUtil.ofLinked("1", "2", "3");
final List filter = CollUtil.edit(a, str -> "edit" + str);
- Assertions.assertEquals("edit1", filter.get(0));
- Assertions.assertEquals("edit2", filter.get(1));
- Assertions.assertEquals("edit3", filter.get(2));
+ assertEquals("edit1", filter.get(0));
+ assertEquals("edit2", filter.get(1));
+ assertEquals("edit3", filter.get(2));
}
@Test
@@ -134,7 +136,7 @@ public class ListUtilTest {
public void pageTest2() {
final List a = ListUtil.ofLinked(1, 2, 3, 4, 5);
final int[] d1 = ListUtil.page(a, PageInfo.of(a.size(), 8).setFirstPageNo(0).setPageNo(0))
- .stream().mapToInt(Integer::valueOf).toArray();
+ .stream().mapToInt(Integer::valueOf).toArray();
Assertions.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, d1);
}
@@ -168,8 +170,8 @@ public class ListUtilTest {
sub.remove(0);
// 对子列表操作不影响原列表
- Assertions.assertEquals(4, of.size());
- Assertions.assertEquals(1, sub.size());
+ assertEquals(4, of.size());
+ assertEquals(1, sub.size());
}
@Test
@@ -182,26 +184,26 @@ public class ListUtilTest {
}
final List beanList = ListUtil.of(
- new TestBean(2, "test2"),
- new TestBean(1, "test1"),
- new TestBean(5, "test5"),
- new TestBean(4, "test4"),
- new TestBean(3, "test3")
+ new TestBean(2, "test2"),
+ new TestBean(1, "test1"),
+ new TestBean(5, "test5"),
+ new TestBean(4, "test4"),
+ new TestBean(3, "test3")
);
final List order = ListUtil.sortByProperty(beanList, "order");
- Assertions.assertEquals("test1", order.get(0).getName());
- Assertions.assertEquals("test2", order.get(1).getName());
- Assertions.assertEquals("test3", order.get(2).getName());
- Assertions.assertEquals("test4", order.get(3).getName());
- Assertions.assertEquals("test5", order.get(4).getName());
+ assertEquals("test1", order.get(0).getName());
+ assertEquals("test2", order.get(1).getName());
+ assertEquals("test3", order.get(2).getName());
+ assertEquals("test4", order.get(3).getName());
+ assertEquals("test5", order.get(4).getName());
}
@Test
public void swapIndex() {
final List list = Arrays.asList(7, 2, 8, 9);
ListUtil.swapTo(list, 8, 1);
- Assertions.assertEquals(8, (int) list.get(1));
+ assertEquals(8, (int) list.get(1));
}
@Test
@@ -215,11 +217,11 @@ public class ListUtilTest {
final List