通过使用下面的代码,我可以找出我所在的数据中心,它工作正常。。
public enum DatacenterEnum {
DEV, DC1, DC2, DC3;
private static DatacenterEnum compareLocation() {
String ourhost = getHostName();
for (DatacenterEnum dc : values()) {
String namepart = "." + dc.name().toLowerCase() + ".";
if (ourhost.indexOf(namepart) >= 0) {
return dc;
}
}
return null;// I don't want to do this now.
}
}
但它可能无法找到任何数据中心,因此目前我正在返回null
。
是否有任何直接的方式或单行命令,我可以在ENUM
中随机返回DC1
或DC2
或DC3
而不是返回null
?
我知道一种方法是列出字符串,然后随机选择0到2(包括0到2)之间的任何整数,然后找到字符串。但它的代码太多了,事实上,它不仅仅是想看看有没有其他方法可以做到这一点?
我可以在枚举中直接使用任何简单而直接的方法吗?
您可以使用值()方法,它返回一个数组。然后只需使用Math.random()返回一个随机实例。
以下是一个示例:
public static void main (String[] args) {
String[] arr = {"DEV","DC1","DC2","DC3"}; //returned by Enum.values(), you get the idea
String randElement = arr[(int) ((Math.random() * 3) +1)];
System.out.println(randElement);
}
基本上可以归结为生成一个介于1和n之间的随机数:)
这是一个适用于任何枚举的通用解决方案。
单一排除的方便方法:
public static <E extends Enum<E>> E getRandom(Class<E> aEnum, E exclude) {
return getRandom(aEnum, Collections.singletonList(exclude));
}
用于一个或多个排除的通用方法:
public static <E extends Enum<E>> E getRandom(Class<E> aEnum, List<E> exclude){
//Convert set of enums into a list
List<E> enums = new ArrayList<E>(EnumSet.allOf(aEnum));
//Remove items from the list that you want to exclude
enums.removeAll(exclude);
int size = enums.size();
if(size != 0){
//Get random enum
int randomIndex = new Random().nextInt(size);
return enums.get(randomIndex);
} else {
throw new IllegalArgumentException("Empty Enumeration after excludes");
}
}
对于你的例子,你可以打电话
EnumUtil.getRandom(DatacenterEnum.class, DatacenterEnum.DEV);
这里有一句话:
return DataCenterEnum.values()[new Random().nextInt(3) + 1)];
对于那些需要对代码进行更严格控制的人,这里有一个更安全的版本,它不依赖于枚举实例的顺序:
return new DataCenterEnum[]{DC1, DC2, DC3}[new Random().nextInt(3)];
问题内容: 好的,这就是我的for子手游戏代码,我唯一要做的就是让我的程序将其中一个单词随机化,这应该在方法中成功完成。但是我唯一的问题是让String变量 “ word” 返回到主类(在主类中的所有 “ word” 变量下面都有错误)。 如果我可以通过这种方法获得另一种帮助,或者从列表中产生随机单词的另一种方法,那将是惊人的。 问题答案: 在Java中,参数是通过值而不是引用传递的。因此,您不能
问题内容: 我想创建精确的5个随机字符串,并尽可能减少重复。最好的方法是什么?谢谢。 问题答案: 这将是我最好的猜测-除非您也要寻找特殊字符: 例 而且,对于基于时钟的时钟(由于它是递增的,因此冲突较少): 注意:增量意味着更容易猜测; 如果您将其用作盐或验证令牌,请不要使用。盐(现在)为“ WCWyb”表示从现在起5秒钟为“ WCWyg”)
问题内容: 我想要一个5个字符串,该字符串由从集合中随机选择的字符组成。 用JavaScript做到这一点的最佳方法是什么? 问题答案: 我认为这将为您工作:
我想打这个电话并返回一个字符串,但我有这个错误: “java.lang.非法状态异常:块()/块第一()/块最后())正在阻塞,这在线程反应器中不受支持” 我不明白为什么我做错了?WebClient支持异步和同步调用。 这是一个只有3个依赖的springboot项目。 我怎么能像正常的同步调用一样只返回一个字符串? 谢谢。
问题内容: 如何在Python中创建随机字符串? 我需要先编号然后重复字符,直到完成为止,这就是我创建的 问题答案: 从(例如)小写字符生成字符串: 结果:
问题内容: 我有阵列中的国家/地区列表,我想从列表中选择一个国家/地区(可能是使用随机的?),但是我自己还没有找到答案… 这是我到目前为止所拥有的: 问题答案: 尝试: