diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index 2083ced3d..682645f52 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -2954,4 +2954,34 @@ public class CollUtil { return IterUtil.isEqualList(list1, list2); } + + /** + * 将指定元素交换到指定索引位置,其他元素的索引值不变 + * 交换会修改原List + * + * @param list 列表 + * @param element 需交换元素 + * @param targetIndex 目标索引 + */ + public static void swapIndex(List list, T element, Integer targetIndex) { + if (isEmpty(list) || !list.contains(element)) { + return; + } + Collections.swap(list, list.indexOf(element), targetIndex); + } + + /** + * 将指定元素交换到指定元素位置,其他元素的索引值不变 + * 交换会修改原List + * + * @param list 列表 + * @param element 需交换元素 + * @param targetElement 目标元素 + */ + public static void swapElement(List list, T element, T targetElement) { + if (isEmpty(list) || !list.contains(targetElement)) { + return; + } + swapIndex(list, element, list.indexOf(targetElement)); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index 4d8717dcb..a296af545 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -767,9 +767,30 @@ public class CollUtilTest { } @Test - public void sortComparableTest(){ + public void sortComparableTest() { final List of = ListUtil.toList("a", "c", "b"); final List sort = CollUtil.sort(of, new ComparableComparator<>()); Assert.assertEquals("a,b,c", CollUtil.join(sort, ",")); } + + @Test + public void swapIndex() { + List list = Arrays.asList(7, 2, 8, 9); + CollUtil.swapIndex(list, 8, 1); + Assert.assertTrue(list.get(1) == 8); + } + + @Test + public void swapElement() { + Map map1 = new HashMap<>(); + map1.put("1", "张三"); + Map map2 = new HashMap<>(); + map2.put("2", "李四"); + Map map3 = new HashMap<>(); + map3.put("3", "王五"); + List> list = Arrays.asList(map1, map2, map3); + CollUtil.swapElement(list, map2, map3); + Map map = list.get(2); + Assert.assertTrue(map.get("2").equals("李四")); + } }