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)