gpt4 book ai didi

java - 在 Java 中使用 Collections.rotate() 在列表中向后移动元素

转载 作者:行者123 更新时间:2023-12-01 21:24:22 25 4
gpt4 key购买 nike

我有一个如下所述的 ArrayList(我的代码片段)。

我的列表元素最初按此顺序排列 - (“周期性”、“多个”、“单个”、“后续”、“连续”)。

在我的列表元素上应用 Collections.rotate() 后,修改后的列表应如下所示 -

(“定期”、“后续”、“多个”、“单个”、“连续”)

元素“Subsequent”需要向后移动到List中第一个索引为“Multiple”的元素,这样第一个索引的元素在旋转后会被下推到第二个索引。

当我尝试使用Collections.rotate()时,它抛出异常。

IllegalArgumentException "fromIndex > toIndex".

我研究并理解了错误,toIndex应该始终大于或等于fromIndex,但我不太清楚如何按顺序修改我的代码片段来实现我所需要的。

如有任何建议,我们将不胜感激。

是否可以使用 rotate() 方法在列表中向后移动元素?

List<String> list = new ArrayList<String>(Arrays.asList("Periodic", "Multiple", "Single", "Subsequent", "Consecutive"));
for (int i = 0; i < list.size(); i++) {
int indexOfSubName = 0;
int indexOfMultipleName = 0;

String name = list.get(i);

if (name.equalsIgnoreCase("Subsequent")) {
indexOfSubName = list.indexOf(name);

}

if (name.equalsIgnoreCase("Multiple")) {
int indexOfMultipleName = list.indexOf(name);
}
Collections.rotate(list.subList(indexOfSubName , indexOfMultipleName ), 1);
}

最佳答案

两个问题:

  • 您正在尝试将子列表从 3 变为 1,反之亦然。所以你可以检查最小值和最大值,然后尝试获取子列表。
  • 您的子列表调用将为您带来从索引 1 到 n-1 的元素,即如果您传递 3,您将只获得两个元素,即索引 1 和 2,而不是第三个元素。看这个javadoc了解详情。你可以这样做:

    List<String> list = new ArrayList<String>(Arrays.asList("Periodic", "Multiple", "Single", "Subsequent", "Consecutive"));
    int indexOfSubName = 0;
    int indexOfMultipleName = 0;
    for (int i = 0; i < list.size(); i++) {
    String name = list.get(i);
    if (name.equalsIgnoreCase("Subsequent")) {
    indexOfSubName = list.indexOf(name);
    }
    if (name.equalsIgnoreCase("Multiple")) {
    indexOfMultipleName = list.indexOf(name);
    }
    }
    int min = Math.min(indexOfMultipleName, indexOfSubName);
    int max = Math.max(indexOfMultipleName, indexOfSubName);
    Collections.rotate(list.subList(min, max+1), 1);
    System.out.println(list);

如果运行此命令,您将获得所需的输出:

[Periodic, Subsequent, Multiple, Single, Consecutive]

关于java - 在 Java 中使用 Collections.rotate() 在列表中向后移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com