Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过交换列表中的其他数据中心,将本地数据中心放在列表的第一位?_Java_Indexoutofboundsexception - Fatal编程技术网

Java 如何通过交换列表中的其他数据中心,将本地数据中心放在列表的第一位?

Java 如何通过交换列表中的其他数据中心,将本地数据中心放在列表的第一位?,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我有一个代码,其中我们尝试将本地数据中心放在首位,并转移所有其他数据中心,但该代码引发异常: 在我下面的代码中,如果当前位置是GHI,那么它将抛出异常作为java.lang.ArrayIndexOutOfBoundsException public enum Colocation { ABC("ABC", 2), PQR("PQR", 3), DEF("DEF", 4), GHI("GHI", 5), ; ... } public static List<Co

我有一个代码,其中我们尝试将本地数据中心放在首位,并转移所有其他数据中心,但该代码引发异常:

在我下面的代码中,如果
当前位置
是GHI,那么它将抛出异常作为
java.lang.ArrayIndexOutOfBoundsException

  public enum Colocation {
    ABC("ABC", 2), PQR("PQR", 3), DEF("DEF", 4), GHI("GHI", 5), ;

    ...
  }


public static List<Colocation> get() {
  List<Colocation> result = Arrays.asList(Colocation.ABC, Colocation.PQR, Colocation.DEF, Colocation.GHI);
  // first element in the list will always be the local datacenter
  Collections.swap(result, 0, CURRENT_LOCATION.get().ordinal());
  Collections.shuffle(result.subList(1, result.size()));
  return result;
}
公共枚举托管{
ABC(“ABC”,2)、PQR(“PQR”,3)、DEF(“DEF”,4)、GHI(“GHI”,5);
...
}
公共静态列表get(){
列表结果=Arrays.asList(Colocation.ABC、Colocation.PQR、Colocation.DEF、Colocation.GHI);
//列表中的第一个元素始终是本地数据中心
集合.swap(结果,0,当前位置.get().ordinal());
Collections.shuffle(result.subList(1,result.size());
返回结果;
}
我想做的是-无论当前位置是什么,我想把它放在列表的第一位,其余的可以是随机的。

做:

result.remove(CURRENT_LOCATION);
result.add(0, CURRENT_LOCATION);
或使用
交换

Collections.swap(result, 0, result.indexOf(CURRENT_LOCATION.get()));

你到底有什么问题?逻辑还是异常?@Stultuske
Collections.swap
引发异常。枚举的
序号将与列表中的位置不同。你应该使用indexOf(或我的答案)。你能告诉我在这里如何使用indexOf吗。我还需要洗牌其他dc。我用
swap
变量更新了答案。我们能在
集合中做些什么吗。swap
来解决问题吗?我还想洗牌其他dc的,而不是使用它是。你仍然可以做洗牌。
swap
只是失败了,因为您没有使用列表中的索引(您使用的是
oridinal
,我认为在这种情况下它将返回
5
,而列表仅包含4个元素)。它仍然抛出
java.lang.ArrayIndexOutOfBoundsException:-1
异常,即使有indexOf。抱歉,由于您没有显示当前位置的定义,我不得不猜测它代表什么。我认为,当您在
indexOf
@flash中使用它时,您需要在其后面添加
.get()
,因为您正在从索引1中洗牌,也许您应该洗牌:
result.subList(1,result.size()-1)